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

时间:2016-11-08 10:15:00

标签: java ssl https client-certificates

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

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

1 个答案:

答案 0 :(得分:1)

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

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

您需要创建SSLContext并加载密钥库

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

然后您必须将sslContext放入SSLConnectionSocketFactory

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

最后建立HttpClient

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

完成所有这些步骤后,httpClient应使用密钥库中的客户端证书来获取所需的请求。