Pan*_*amo 2 java https ssl-certificate ibm-domino
当我们将 Domino 开发服务器从 8.5.3 升级到 9 时,从 Java 代码到具有GoDaddy证书的站点的 HTTPS 连接停止工作。与具有DigiCert证书的服务器的连接工作正常。这发生在代理和 XPage 中。
这是一个 XPage 示例代码:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.beforePageLoad>
<![CDATA[#{javascript:new java.net.URL("https://www.sslshopper.com/").openStream();]]>
</xp:this.beforePageLoad>
</xp:view>
Run Code Online (Sandbox Code Playgroud)
我也试过UrlConnection。这是例外:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: 3659
com.ibm.jsse2.o.a(o.java:15)
com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:460)
com.ibm.jsse2.kb.a(kb.java:294)
com.ibm.jsse2.kb.a(kb.java:533)
com.ibm.jsse2.lb.a(lb.java:55)
com.ibm.jsse2.lb.a(lb.java:581)
com.ibm.jsse2.kb.s(kb.java:11)
com.ibm.jsse2.kb.a(kb.java:394)
com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:44)
com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:496)
com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:528)
com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.java:505)
com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:83)
com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:31)
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1184)
com.ibm.net.ssl.www2.protocol.https.b.getInputStream(b.java:40)
java.net.URL.openStream(URL.java:1022)
Run Code Online (Sandbox Code Playgroud)
...
java.security.cert.CertificateException: 3659
com.ibm.domino.napi.ssl.DominoX509TrustManager.checkServerTrusted(DominoX509TrustManager.java:98)
com.ibm.jsse2.lb.a(lb.java:468)
com.ibm.jsse2.lb.a(lb.java:581)
com.ibm.jsse2.kb.s(kb.java:11)
com.ibm.jsse2.kb.a(kb.java:394)
com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:44)
com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:496)
com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:528)
com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.java:505)
com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:83)
com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:31)
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1184)
com.ibm.net.ssl.www2.protocol.https.b.getInputStream(b.java:40)
java.net.URL.openStream(URL.java:1022)
Run Code Online (Sandbox Code Playgroud)
我根据以下说明将 GoDaddy 证书导入到 domino_path\jvm\lib\security\cacerts 密钥库:
http://drcs.ca/blog/adding-godaddy-intermediate-certificates-to-java-jdk/
但这并没有帮助,我还导入了gd-class2-root.crt 却没有结果。我还尝试重命名cacerts文件并从 8.5.3 服务器复制该文件,但也无济于事。在这些更改之后,我一直在启动 HTTP 和 Domino 服务器。
当然,我可以使用不关心证书的 Java 代码,但我相信这对于生产来说不是一个很好的解决方案。此外,我们在许多不同的地方(包括 JAR)都有代码,这些代码与此 URL 建立了 HTTPS 连接。
更新 1
这是在error-log-0.xml 中:
主题证书 CN=www.sslshopper.com,OU=Domain Control Validated,O=www.sslshopper.com,由 SERIALNUMBER=07969287 颁发,CN=Go Daddy Secure Certification Authority,OU= http://certificates.godaddy.com /repository , O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US, is not trust。验证失败,错误 3659。
我认为这个信息很清楚。我还注意到System.getProperty("javax.net.ssl.trustStore")返回 null 但这也在 8.5.3 服务器中发生。我尝试设置 trustStore ,setProperty但错误仍然相同。
更新 2
它的工作原理与西蒙的代码使用createSocket。但是,我们所有的代码使用java.net.URL,UrlConnection,HttpsUrlConnection或Apache HTTP客户端。其中一些由 3rd 方作为 JAR 提供。我们无法更改所有使用createSocket.
有任何想法吗?谢谢。
小智 5
因此,对于 Domino 9,随着 OpenSocial 新功能的添加,围绕证书更改了许多功能以使其更易于维护。
因此,有一个新的 API“com.ibm.domino.napi.ssl.DominoX509TrustManager”。这个 API 现在的作用是检查 Domino 证书中是否有相关的可信证书,该证书也针对服务器证书进行了交叉认证。
它首先在 CACERT 中进行检查。如果找不到,则它会检查 Domino 证书。
因此,为了使上面的代码工作,您需要执行以下操作。
打开 Domino Administrator 客户端并选择“人员和组 -> 证书”。

在操作菜单中选择“导入 Internet 证书”。

使用文件对话框选择要导入的相关证书文件。导入时可能会要求您提供文件结构,因此请根据需要选择正确的结构。完成后它应该出现在视图中。

打开文档并从操作菜单中选择“创建交叉证书”。

弹出一个对话框。您选择证书并单击确定。

下一个对话框确保您为您的服务器正确设置了它。IE。正确的服务器和验证者。完成后单击交叉认证。

这应该在视图中创建一个交叉证书:

此时需要使用以下命令重新启动 HTTP 进程。
tell http quit
load http
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6906 次 |
| 最近记录: |