2016-08-28 7 views
1

Компания, с которой я работаю, создает программное обеспечение, которое сканирует и индексирует различные источники для использования в поиске, в этом случае мы полностью застреваем при попытке подключения к 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) 
+0

Ну, я сделал еще один шаг: Казалось бы, сертификат CA третьей стороны, который используется для файла TrustedCerts.class у моего клиента, не дает нам полезного файла TrustedCerts.class. Мы попытаемся настроить самозаверяющий сертификат, чтобы увидеть, что-нибудь изменится. – Paul

ответ

1

Хорошо, ответ был чист, как кристалл, но не то, что я активно искал.

Причина, по которой это не работает, заключается в том, что сертификат третьей стороны не является сертификатом SHA-1, а Lotus Notes 8.5.x поддерживает только SHA-1 (as per this documentation).

Таким образом, в основном, их сертификат никогда не может использоваться для аутентификации SSL программно или иным образом.

0

Вы упомянули протоколирование DIIOP, но если соединение не удается в SSL рукопожатия, то внутренности задачи DIIOP вероятно, не знаю, что это неправильно, так как это происходит на более низком уровне в стеке. Существуют, однако, дополнительные отладочные переменные, которые могут быть установлены на сервере.

DEBUG_SSL_HANDSHAKE=1 
DEBUG_SSL_CIPHERS=1 
DEBUG_SSL_ALL=1 

Последнюю настройку можно довести до 2 или 3 для получения более подробной информации.

Может потребоваться перезагрузка сервера (или, возможно, задача сервера DIIO), чтобы настройки вступили в силу.

+1

Спасибо, я получил их, но вам нужно подождать, прежде чем они вернутся обратно в сторонний сертификат и повторно выпустят TrustedCerts. файл класса – Paul

 Смежные вопросы

  • Нет связанных вопросов^_^