首页 > Java > java教程 > 如何在 Java 中为特定 SSL 连接设置自定义证书信任?

如何在 Java 中为特定 SSL 连接设置自定义证书信任?

Susan Sarandon
发布: 2024-12-18 13:48:14
原创
840 人浏览过

How to Set Custom Certificate Trust for Specific SSL Connections in Java?

为目标连接设置自定义证书信任

问题陈述

将外部模块集成到应用程序中需要访问 SSL - 使用自签名证书的安全网站。由于证书的信任问题,现有代码失败。面临的挑战是使应用程序能够仅针对此特定连接接受此自签名证书,而不损害对其他连接的信任或修改系统范围的证书存储。

最佳解决方案

要选择性地信任特定连接的自签名证书,请创建自定义 SSLSocket 工厂并在建立 HttpsURLConnection 之前将其设置连接:

...
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setSSLSocketFactory(sslFactory);
conn.setMethod("POST");
...
登录后复制

创建 SSLSocket 工厂

要创建 SSLSocket 工厂,请按如下方式初始化它:

/* Load the keyStore that includes self-signed cert as a "trusted" entry. */
KeyStore keyStore = ... 
TrustManagerFactory tmf = 
  TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tmf.getTrustManagers(), null);
sslFactory = ctx.getSocketFactory();
登录后复制

加载密钥库

加载包含以下内容的密钥库自签名证书作为“可信条目”:

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(trustStore, trustStorePassword);
trustStore.close();
登录后复制

替代密钥存储加载方法

或者,使用 keytool 将 PEM 格式证书导入密钥商店:

keytool -import -file selfsigned.pem -alias server -keystore server.jks
登录后复制

以上是如何在 Java 中为特定 SSL 连接设置自定义证书信任?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板