我的需求是接受来自独立java应用程序的REST Web服务URL(https:/:/dctm-rest)上启用的SSL证书>
据我所知,最好的方法是使用KeyTool创建密钥库/TrustStore,从浏览器/OpenSL下载证书,然后将其添加到TrustStore中。我们正在创建一个依赖性,并且有人必须继续更新每个续订的证书。
有人可以指导我通过删除手册依赖性来实现这一目标?
您必须将https://dctm-rest
上的服务器证书包括在您的JRE(TrustStore)的白名单中
选项
1)包括JRO Trustore中的服务器证书(jre/lib/security/cacerts
)(不推荐)
要下载服务器证书,使用浏览器打开站点,右键单击绿色锁,选择"查看证书"并下载
探索Cacerts和导入信任证书的最简单方法是使用Portecle(http://portecle.sourceforge.net/)之类的GUI工具。您也可以使用Keytool
keytool -import -trustcacerts -keystore /opt/java/jre/lib/security/cacerts -alias mycert -noprompt -storepass changeit -file /tmp/examplecert.crt
请参阅如何将自签名证书正确导入Java密钥库,默认情况下所有Java应用程序可用?
2)使用您自己的TrustStore ,并包括服务器证书(推荐)
System.setProperty ("javax.net.ssl.trustStore", path_to_your_trustore_jks_file);
System.setProperty ("javax.net.ssl.trustStorePassword", "password");
您还可以创建一个sslsocketFactory,并在连接之前添加到连接或使用静态方法应用于所有连接
HttpsURLConnection.setDefaultSSLSocketFactory(sslFactory);
这是创建套接字工厂的示例
//Load JKS keystore that includes the server certificate or the root
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();
3)根本不使用TrustStore (根本不建议使用)
请参阅单个连接的禁用SSLHandShakeException(我不会复制解决方案)