在 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/。
我有一个 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/。