2016-08-28 9 views
1

私が働く会社は、検索で使用するさまざまなソースをクロールしてインデックスを作成するソフトウェアを作成しています。この場合、SSLを使用してLotus Notesに接続しようとしています。これは「devで動作しましたが、失敗しました」という古典的なケースです。SSLポート63149のLotus Notes DIIOPに接続できません

問題は、Lotus Notesの専門家ではなく、開発者や技術者であるという事実によってさらに複雑になります。

基本的に私たちは、このコマンドを使用してDIIOP IORテキストファイルをつかむために、ロータスに接続するJavaソフトウェアの一部を持っている:

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

は今、これは非SSL接続で、接続するためのユーザー名とパスワードが必要です。これは毎回完璧に機能します。

はその後、我々は、使用してセッションを作成しようと、この:

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

場所:

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 

は、私が最も理解:私たちは常にこのスタックトレースを受ける接続する場合

args[0] = "-ORBEnableSSLSecurity"; 

その理由の一般的な理由は、TrustedCerts.classファイルを正しくインポートしていないためです。 rをダブルパスとトリプルチェックした後、それはクラスパスに入っているだけです(実際には開発環境で動作します)。

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) 
+0

まあ、私はもう一歩近づいています。私のクライアントのTrustedCerts.classファイルで使用されているサードパーティーのCA証明書が、私たちに有用な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までプッシュすることができます。

設定を有効にするには、サーバーの再起動(またはおそらくサーバーのdiiopタスク)が必要な場合があります。

+1

ありがとうございます。私はそれらを設定しましたが、サードパーティの証明書に戻ってTrustedCertsを再発行するまで待つ必要があります。クラスファイル – Paul

関連する問題