使用客户端证书建立与HTTPS的连接

问题描述:

我想使用Java将文件上载到HTTPS服务器。 服务器不是一个开放的URL,因此我需要客户端证书来建立连接。 我有.pem , .jks , .pkcs12客户端证书文件。使用客户端证书建立与HTTPS的连接

任何人都可以建议我如何在我的应用程序中使用此证书文件来建立通信? 我是否需要使用全部3个证书文件?

+1

可能出现[HTTPS/SSL上的Java客户端证书]重复(http://*.com/questions/875467/java-client-certificates-over-https-ssl) – Matthias

.jks文件是Java Keystore。它应该包含正确的客户端证书(也可能包含证书链中的中间证书)。

我假设你要编写一个将文件上传到HTTPS服务器的客户端?然后你应该使用带有客户端证书的.jks文件(比如说apache)HttpClient

你需要创建一个SSLContext并加载密钥库

SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(new File("keystore", "yourPassword".toCharArray(), new TrustSelfSignedStrategy()).build(); 

然后,你必须把sslContextSSLConnectionSocketFactory

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.getDefaultHostnameVerifier()); 

然后终于打造HttpClient

HttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); 

完成这些步骤后httpClient应该使用您的密钥库中的客户端证书来满足您的要求。