【发布时间】:2016-08-09 12:55:22
【问题描述】:
我需要将应用程序与强制使用 https 的外部 Web 服务集成。此 Web 服务的作者为我提供了 .crt 文件,我应该使用它来发出 https 请求。经过一番调查,我发现以下代码使用 KeyStore 类进行安全 https 访问:
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();
在此代码中,KeyStore 需要输入流以及 密码 trustStore.load(instream, password.toCharArray());。但是,据我了解,使用 .crt 文件时我们不需要密码。所以这种加载证书的方式不适合我。同时,从我目前的发现来看,我在这里提供的代码是配置 HttpClient 以使用 SSL 证书的唯一方法。是否有任何解决方法来配置 HttpClient 以使用 .crt 证书?
谢谢,
安德烈
【问题讨论】:
标签: java ssl https secure-crt