在 IBM Notes 中发送 HTTPS post 时出现 SSLHandshakeException

SSLHandshakeException when sending HTTPS post in IBM Notes

我有一个 java 代理,我想在其中通过 HTTPS 发送我的数据。 HTTP 有效。但是 HTTPS 没有。我收到此错误:

javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.j: No trusted certificate found
    at com.ibm.jsse2.o.a(o.java:9)
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:340)
    at com.ibm.jsse2.kb.a(kb.java:279)
    at com.ibm.jsse2.kb.a(kb.java:221)
    at com.ibm.jsse2.lb.a(lb.java:97)
    at com.ibm.jsse2.lb.a(lb.java:102)
    at com.ibm.jsse2.kb.t(kb.java:227)
    at com.ibm.jsse2.kb.a(kb.java:425)
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:785)
    at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:675)
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:669)
    at com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.java:95)
    at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:162)
    at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:36)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1044)
    at com.ibm.net.ssl.www2.protocol.https.b.getOutputStream(b.java:53)
    at JavaAgent.postOrder(Unknown Source)
    at JavaAgent.NotesMain(Unknown Source)
    at lotus.domino.AgentBase.runNotes(Unknown Source)
    at lotus.domino.NotesThread.run(Unknown Source)
Caused by: com.ibm.jsse2.util.j: No trusted certificate found
    at com.ibm.jsse2.util.i.a(i.java:76)
    at com.ibm.jsse2.util.i.b(i.java:136)
    at com.ibm.jsse2.util.g.a(g.java:12)
    at com.ibm.jsse2.pc.a(pc.java:56)
    at com.ibm.jsse2.pc.checkServerTrusted(pc.java:95)
    at com.ibm.jsse2.pc.b(pc.java:84)
    at com.ibm.jsse2.lb.a(lb.java:639)

发帖代码是这样的:

HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
            conn.setDoOutput(true);
            conn.getOutputStream().write(postDataBytes);

我从网站(我要将 POST 发送到的网站)获取证书并将这些证书安装在服务器上 > ikeyman.exe(*根据 http://www-01.ibm.com/support/docview.wss?uid=swg21588966)。之后我重新启动了整个服务器,但仍然出现握手错误。怎么会这样?代理也在这台服务器上(让我们称之为服务器 B),但服务器 B 是服务器 A 的副本。我手动 运行 在服务器 B 上设置代理。 安装的是 IBM Domino 设计器 9.0 社交版

版本 9.0.1FP4

解决方案:

已在 ikeyman 上安装证书。 需要 运行 安排代理而不是手动。

哦,该死。我和你一模一样,后来测试了很多次还是不行。我终于设法修复了它,但是......我不记得是如何修复的。

我的代码:

        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        SSLContext sc = SSLContext.getInstance("TLSv1.2");
        sc.init(null, null, new java.security.SecureRandom());
        conn.setSSLSocketFactory(sc.getSocketFactory());

        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
        conn.setDoOutput(true);
        if (postDataBytes.length > 0)
            conn.getOutputStream().write(postDataBytes);

请看

尤其是答案的最后一部分: Java/LotusScript边

必须告知 Java 或 LotusScript 消费者接受 CA 安全性 (stub.setSSLOptions(PortTypeBase.NOTES_SSL_ACCEPT_SITE_CERTS);)

基于在 LotusScript 中创建您的第一个 Web 服务提供者和使用者的示例和 Java。

您可以尝试将网站上的(root and/or 中间)证书添加到您的 java 证书存储区。 有关详细信息,请参阅 https://abdata.ch/add-a-root-certificate-to-ibm-domino-jvm-keystore/