4

を使用してJavaクライアントを使用していますJMS/JNDI。一方向SSL認証を使用している場合、接続は機能していSSLCAUTH(OPTIONAL)ます。私が行った最初のステップは、クライアントの公開証明書をエクスポートすることです。

keytool -export -keystore keystore -storepass storepass -alias CLIENT -file client.cer

次に、この証明書をMQキーリポジトリに追加しました。

gsk7cmd -cert -add -db keydb.kdb -pw password -label ibmwebspheremqclient -file client.cer -format binary

そしてついにSSLCAUTH(REQUIRED)モードに切り替えました。

次のエラーログが表示されます。メッセージはかなり明確です、それは私のクライアント証明書を見つけることができません。クライアント証明書にラベルが必要であることを読みましたibmwebspheremq<client_user_id>。Java経由で接続しているので、このユーザーIDは何ですか?

AMQ9637: Channel is lacking a certificate.
4

1 に答える 1

2

Technote Specifying the userid in the SSL certificate label for an MQ clientによると、Java および JMS クライアントは、ラベルに基づいて証明書を見つけられません。

多くの場合、トラスト ストアとキー ストアの不一致が問題になります。私はかなり一般的に2つの問題を見てきました。

  1. アプリケーションはトラスト ストアを指定しますが、キーストアは指定しません。これは、匿名 (一方向) SSL ではうまく機能しますが、相互認証 SSL では機能しません。アプリは、相互認証のためにキー ストアとトラスト ストアの両方を指定する必要があります。
  2. アプリでトラスト ストア ファイルが指定されていても、プライベート証明書がキ​​ー ストアにある場合があります。または、アプリがトラスト ストアとキー ストアの両方に同じファイルを指定し、個人証明書は実際には別のトラスト ストア ファイルにあります。

これらのいずれかが問題を解決しますか? keytool -cert -listそうでない場合は、キー ストアとトラスト ストアの両方、およびキーストア/トラストストアを設定するコマンド ラインまたはコードの一部について、質問を更新してください。

于 2012-10-12T13:40:20.713 に答える