java - 使用客户端证书建立到 HTTPS 的连接

标签 java ssl https client-certificates

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

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

最佳答案

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

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

您需要创建一个SSLContext 并加载 keystore

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 应该使用 keystore 中的客户端证书来满足您的要求。

关于java - 使用客户端证书建立到 HTTPS 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40484265/

相关文章:

java - 一段时间后 Vaadin UI 分离

java http GET - 结果解析

java - Java 中 Thread.sleep() 的 Junit 测试

java - 使用 GremlinPipeline 查找最短路径

ruby-on-rails - Nginx SSL 工作但以 http 形式发送请求

apache - 对某些页面强制使用 https,对所有其他页面强制使用 http

git - 使用 Git 的最佳方式是什么,是通过 HTTPS 还是通过 SSH?

ssl - Nginx 正在获取旧的 ssl 证书

ruby-on-rails - 获取 SSL_connect ... 使用 .p12 文件 ruby​​ 时 sslv3 警报握手失败

php - ob_start https 和 http 之间的区别?