AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 505273
Accepted
Panu Haaramo
Panu Haaramo
Asked: 2013-05-07 01:26:38 +0800 CST2013-05-07 01:26:38 +0800 CST 2013-05-07 01:26:38 +0800 CST

尝试访问 HTTPS URL 时 Domino 9 中的 Java CertificateException

  • 772

当我们将 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>

我也试过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)

...

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)

我根据以下说明将 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,不受信任。验证失败,错误 3659。

我认为这个信息很明确。我还注意到System.getProperty("javax.net.ssl.trustStore")返回 null 但这也发生在 8.5.3 服务器中。我尝试将 trustStore 设置为setProperty但错误仍然相同。

更新 2

它与使用createSocket. 但是我们所有的代码都使用java.net.URL、UrlConnection或HttpsUrlConnectionApache HTTP 客户端。其中一些由第 3 方作为 JAR 提供。我们不能将所有这些更改为 use createSocket。

有任何想法吗?谢谢。

java
  • 1 1 个回答
  • 7366 Views

1 个回答

  • Voted
  1. Best Answer
    Simon O'Doherty
    2013-06-12T23:34:06+08:002013-06-12T23:34:06+08:00

    因此,对于 Domino 9,随着新功能 OpenSocial 的添加,围绕证书更改了许多功能,以使其更易于维护。

    因此,有一个新的 API“com.ibm.domino.napi.ssl.DominoX509TrustManager”。此 API 现在所做的是检查 Domino 证书以查找相关的受信任证书,该证书也针对服务器证书进行了交叉认证。

    它首先检查 CACERTS。如果它找不到这个,那么它将检查 Domino 证书。

    因此,为了使上面的代码正常工作,您需要执行以下操作。

    1. 打开 Domino Administrator 客户端并选择“People and Groups -> Certificates”。

      人员和组选项卡,证书视图

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

      菜单设置

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

      显示已导入证书的视图。

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

      创建交叉证书的菜单选项

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

      交叉证书对话框

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

      颁发交叉证书对话框

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

    显示交叉证书的视图

    此时需要使用以下命令重启 HTTP 进程。

    tell http quit 
    load http
    
    • 5

相关问题

  • jvm性能调优技巧/资源?

  • Linux 服务器上的多个*几乎*相同的进程

  • 您认为 Linux 服务器上的 Java 是个问题吗?[关闭]

  • 如何定期复制 SVN 存储库而不会丢失目标标签和分支?

  • GlassFish 更改 Web 服务的端口

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve