gpt4 book ai didi

java - 无法连接到 SSL 端口 63149 上的 Lotus Notes DIIOP

转载 作者:行者123 更新时间:2023-11-30 07:11:19 25 4
gpt4 key购买 nike

我工作的公司创建了一种软件,可以对各种源进行爬网和索引以用于搜索,在这种情况下,我们完全陷入尝试通过 SSL 连接到 Lotus Notes 的困境。这是一个典型的“在开发中有效,但在生产中失败”的案例。

我们是开发人员和技术人员,而不是 Lotus Notes 专家,这一事实使问题变得更加复杂。

基本上,我们有一个 Java 软件可以连接到 Lotus,使用以下命令获取 DIIOP IOR 文本文件:

String ior = NotesFactory.getIOR(host, userIOR, pwdIOR);

现在,这是一个非 SSL 连接,需要用户名和密码才能连接。这每次都很完美。

然后我们尝试使用以下命令创建 session :

session = NotesFactory.createSessionWithIOR(ior, args, this.user, this.pwd);

哪里:

args[0] = "-ORBEnableSSLSecurity";

连接时我们始终收到此堆栈跟踪:

NotesException: Session closed due to communications failure
at lotus.domino.cso.ORBCallback.make_error(Unknown Source)
at lotus.priv.CORBA.iiop.Generic.make_error(Unknown Source)
at lotus.priv.CORBA.portable.ObjectImpl._invoke(Unknown Source)
at lotus.domino.corba._IObjectServerStub.createSession(Unknown Source)
at lotus.domino.cso.Session.initSession(Unknown Source)
at lotus.domino.cso.Session.<init>(Unknown Source)
at lotus.domino.cso.Session.createSession(Unknown Source)
at lotus.domino.NotesFactory.createSessionUP(Unknown Source)
at lotus.domino.NotesFactory.createSessionWithIOR(Unknown Source)
[ ... ]
Caused by: org.omg.CORBA.COMM_FAILURE: java.net.SocketException: Connection reset: Connection closed: Host: <redacted> Port: 63149 vmcid: 0x0 minor code: 1 completed: Maybe
at lotus.priv.CORBA.iiop.IIOPConnection.purge_calls(Unknown Source)
at lotus.priv.CORBA.iiop.ReaderThread.run(Unknown Source)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:154)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at lotus.priv.CORBA.iiop.Message.readFully(Unknown Source)
at lotus.priv.CORBA.iiop.Message.createFromStream(Unknown Source)
at lotus.priv.CORBA.iiop.IIOPInputStream.prefill(Unknown Source)
at lotus.priv.CORBA.iiop.IIOPConnection.createInputStream(Unknown Source)
... 1 more

我知道最常见的原因是因为我们没有正确导入 TrustedCerts.class 文件,但是经过双重和三重检查后,它在类路径中就很好了(事实上它在开发环境中工作)我们'确信它已被加载。

我们知道,如果禁用 SSL(也称为删除上述参数),我们的代码将连接到非 SSL DIIOP 端口 63148 并且工作正常,但项目要求所有数据都必须通过 SSL 传递。

这最终让我想到了我的实际问题:我们如何让 Lotus 报告此连接失败的原因?

我尝试将 DIIOP 日志级别提高到 4,这显然应该显示所有传输,但当我尝试连接时,日志没有显示任何内容。另外值得注意的是 DIIOP 服务肯定正在运行并且也在正确的端口上。

我还检查了我们是否通过防火墙到达远程机器,并且 RedHat 计算机上的 TCPDUMP 清楚地表明我们在远程 Lotus Notes 主机响应关闭连接之前建立了连接。

[Pertinent Information]
Application: Java
Library: NCSO.jar
Lotus Version: Domino 8.5.3 FP6
Lotus Server: Windows Server 2008 Standard
Ports: 63148 (non-SSL), and 63149 (SSL)

最佳答案

好吧,答案很明确,但不是我正在积极寻找的东西。

这不起作用的原因是第三方证书不是 SHA-1 证书,并且 Lotus Notes 8.5.x 仅支持 SHA-1 ( as per this documentation )。

所以基本上他们的证书永远不能以编程方式或其他方式用于 SSL 身份验证。

关于java - 无法连接到 SSL 端口 63149 上的 Lotus Notes DIIOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39196620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com