Documentum Rest服务 - 从Java客户端信任SSL证书

时间:2016-06-22 17:20:31

标签: rest ssl ssl-certificate sslhandshakeexception

我需要接受从独立Java应用程序(将捆绑为JAR)的REST Web服务URL(https:/:/ dctm-rest)上启用的SSL证书。

据我所知,最好的方法是使用Keytool创建KeyStore / TrustStore,从browser / openssl下载证书并将其添加到TrustStore。这样我们就创建了一个依赖项,并且每个续订都需要不断更新证书。

有人可以通过删除手动依赖来指导我实现这一点吗?

1 个答案:

答案 0 :(得分:0)

您必须将https://dctm-rest的服务器证书包含在JRE(信任库)的白名单中

选项

1)在JRE委托书中包含服务器证书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

请参阅How to properly import a selfsigned certificate into Java keystore that is available to all Java applications by default?

2)使用您自己的信任库并包含服务器证书(推荐

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)根本不要使用信任库(根本不推荐)

请参阅Disable SSLHandshakeException for a single connection(我不会复制解决方案)