Компания, с которой я работаю, создает программное обеспечение, которое сканирует и индексирует различные источники для использования в поиске, в этом случае мы полностью застреваем при попытке подключения к Lotus Notes через SSL. Это классический случай: «он работал в dev, но не работал в prod».Не удается подключиться к Lotus Notes DIIOP на порту SSL 63149
Проблема еще больше усугубляется тем фактом, что мы разработчики и технари, а не эксперты Lotus Notes.
В основном у нас есть часть программного обеспечения Java, который подключается к Lotus, чтобы захватить текстовый файл DIIOP IOR, используя следующую команду:
String ior = NotesFactory.getIOR(host, userIOR, pwdIOR);
Теперь это соединение не-SSL и требует имя пользователя и пароль для подключения , Это прекрасно работает каждый раз.
Затем мы попытались создать сеанс с помощью этого:
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, howeve r после двойной и тройной проверки, что он находится на пути к классу просто отлично (и тот факт, что он работает в среде dev), мы уверены, что он загружается.
Мы знаем, если мы отключим SSL (ака удалить вышеупомянутый аргумент) наш код будет подключаться к порту 63148 без SSL DIIOP и работать просто отлично, но это требование к проекту, чтобы все данные передавались через SSL.
Что, наконец, приводит меня к моему актуальному вопросу: Как мы можем сообщить Lotus о том, почему это соединение не работает?
Я попытался повысить уровень журнала DIIOP до 4, который, по-видимому, должен показывать все передачи, но журналы ничего не показывают при попытке подключения. Также стоит отметить, что сервис DIIOP определенно работает и на правильных портах.
Я также проверил, что мы осуществляем его через брандмауэр в удаленном ящике, а TCPDUMP на нашей машине RedHat ясно показывает, что мы устанавливаем соединение с удаленным хостом 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)
Ну, я сделал еще один шаг: Казалось бы, сертификат CA третьей стороны, который используется для файла TrustedCerts.class у моего клиента, не дает нам полезного файла TrustedCerts.class. Мы попытаемся настроить самозаверяющий сертификат, чтобы увидеть, что-нибудь изменится. – Paul