我需要集成一個應用程序與強制使用https的外部Web服務。此Web服務的作者爲我提供了.crt文件,我應該使用它來提供https請求。經過一番調查,我發現下面的代碼,它使用KeyStore類爲安全HTTPS訪問:使用KeyStore與.crt
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(new File(file));
try {
trustStore.load(instream, password.toCharArray());
} finally {
instream.close();
}
SSLContext sslcontext =
SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()).build();
SSLConnectionSocketFactory sslsf =
new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1.2"}, null,
BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
HttpClients.custom().setSSLSocketFactory(sslsf).build();
在這段代碼密鑰庫,需要輸入流與密碼trustStore.load(instream, password.toCharArray())
一起。不過,據我所知,使用.crt文件時我們不需要密碼。所以這種加載證書的方式並不適合我。同時,從我迄今爲止發現的情況來看,我在這裏提供的代碼是配置HttpClient使用SSL證書的唯一方法。是否有任何解決方法來配置HttpClient使用.crt證書?
感謝,
安德烈
第三種選擇是直接將信任庫用於客戶端API,這是OP看起來像他們正在做的事情。這比你最初提出的兩個選項中的任何一個都好,因爲它不會干擾任何其他信任商店的使用。 –
@ChristopherSchultz同意,如果OP想要使用原來的解決方案,當然可以。我想這取決於用例,如果分佈在多個應用程序中,更新全局cacerts可能會更容易。 –