2012-08-07 13 views
7

自己署名入り証明書を使用する安全なWebSocketトランスポートを介してCometDサーバーに接続するJavaプロジェクトがあります。私は、次のようにWebSocketClientFactoryを設定しています:JettyのWebSocketClientFactoryでカスタムキーストアを使用する

wssFactory.getSslContextFactory().setKeyStorePath("/path/to/my/custom.jks"); 
wssFactory.getSslContextFactory().setKeyStorePassword("mypass"); 

そして、そのように私のBayeuxClientを作成:確かに

BayeuxClient client = new BayeuxClient(
     "wss://myserver.com/cometd", 
     WebSocketTransport.create(clientOptions, wssFactory)); 

、この最初のロードされたときに、物事が正しく設定されているように見える。

[DEBUG] 2012-08-07 12:58:05,786 : starting [email protected] 
[DEBUG] 2012-08-07 12:58:05,786 : starting qtp2005556553{8<=0<=0/254,-1} 
[DEBUG] 2012-08-07 12:58:05,788 : STARTED qtp2005556553{8<=7<=8/254,0} 
[DEBUG] 2012-08-07 12:58:05,788 : starting org.eclipse[email protected]50c8c3b8 
[DEBUG] 2012-08-07 12:58:05,795 : STARTED org.eclipse[email protected]50c8c3b8 
[DEBUG] 2012-08-07 12:58:05,795 : Starting Thread[qtp2005556553-33 Selector0,5,main] on [email protected] 
[DEBUG] 2012-08-07 12:58:05,797 : starting [email protected](/Users/apetresc/Downloads/infrastructure.jks,null) 
[INFO ] 2012-08-07 12:58:05,981 : Enabled Protocols [SSLv2Hello, SSLv3, TLSv1] of [SSLv2Hello, SSLv3, TLSv1] 
[DEBUG] 2012-08-07 12:58:05,981 : Enabled Ciphers [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV] of [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV, SSL_RSA_WITH_NULL_MD5, SSL_RSA_WITH_NULL_SHA, SSL_DH_anon_WITH_RC4_128_MD5, TLS_DH_anon_WITH_AES_128_CBC_SHA, TLS_DH_anon_WITH_AES_256_CBC_SHA, SSL_DH_anon_WITH_3DES_EDE_CBC_SHA, SSL_DH_anon_WITH_DES_CBC_SHA, SSL_DH_anon_EXPORT_WITH_RC4_40_MD5, SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA, TLS_KRB5_WITH_RC4_128_SHA, TLS_KRB5_WITH_RC4_128_MD5, TLS_KRB5_WITH_3DES_EDE_CBC_SHA, TLS_KRB5_WITH_3DES_EDE_CBC_MD5, TLS_KRB5_WITH_DES_CBC_SHA, TLS_KRB5_WITH_DES_CBC_MD5, TLS_KRB5_EXPORT_WITH_RC4_40_SHA, TLS_KRB5_EXPORT_WITH_RC4_40_MD5, TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA, TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5] 
[DEBUG] 2012-08-07 12:58:05,981 : STARTED [email protected](/Users/apetresc/Downloads/infrastructure.jks,/Users/apetresc/Downloads/infrastructure.jks) 
[DEBUG] 2012-08-07 12:58:05,981 : STARTED [email protected] 

そして、確かに、は実際にBayeuxClient作品を使用。しかし、キーストアをまったく指定しなくても動作します。ただ署名されていない証明書として扱われます。そして、確かに、私は数秒ごとに取得しておくエラーログから判断すると、何が起こっているかのようだという。

[DEBUG] 2012-08-07 13:20:37,348 : State update: CONNECTED -> CONNECTED 
[DEBUG] 2012-08-07 13:20:37,348 : Connecting, transport [email protected] 
[DEBUG] 2012-08-07 13:20:37,348 : [Session-1, SSL_NULL_WITH_NULL_NULL] [email protected] SSL NOT_HANDSHAKING i/o/u=0/0/0 ishut=false oshut=false {WebSocketClientConnection [email protected] state=START buffer= [email protected] closed=false buffer=-1} NOT_HANDSHAKING filled=0/0 flushed=0/0 
[DEBUG] 2012-08-07 13:20:37,348 : Sending messages [{id=50, connectionType=websocket, channel=/meta/connect, clientId=2u16ol79fcq7hqe1wu52pr0ws4aw}] 
[DEBUG] 2012-08-07 13:20:37,348 : Registering WebSocketExchange {id=50, connectionType=websocket, channel=/meta/connect, clientId=2u16ol79fcq7hqe1wu52pr0ws4aw} 
[DEBUG] 2012-08-07 13:20:37,348 : [Session-1, SSL_NULL_WITH_NULL_NULL] [email protected] SSL NOT_HANDSHAKING i/o/u=0/0/0 ishut=false oshut=false {WebSocketClientConnection [email protected] state=OPCODE buffer= [email protected] closed=false buffer=-1} NOT_HANDSHAKING filled=0/0 flushed=0/0 
[DEBUG] 2012-08-07 13:20:37,348 : Sending messages [{"id":"50","connectionType":"websocket","channel":"/meta/connect","clientId":"2u16ol79fcq7hqe1wu52pr0ws4aw"}] 
[DEBUG] 2012-08-07 13:20:37,348 : [Session-1, SSL_NULL_WITH_NULL_NULL] [email protected] SSL NOT_HANDSHAKING i/o/u=0/0/0 ishut=false oshut=false {WebSocketClientConnection [email protected] state=OPCODE buffer= [email protected] closed=false buffer=116} NOT_HANDSHAKING filled=0/0 flushed=0/0 
[DEBUG] 2012-08-07 13:20:37,349 : [Session-1, SSL_NULL_WITH_NULL_NULL] [email protected] SSL NOT_HANDSHAKING i/o/u=0/0/0 ishut=false oshut=false {WebSocketClientConnection [email protected] state=OPCODE buffer=null [email protected] closed=false buffer=116} NOT_HANDSHAKING filled=0/0 flushed=0/0 
[DEBUG] 2012-08-07 13:20:37,349 : [Session-1, SSL_NULL_WITH_NULL_NULL] wrap OK NOT_HANDSHAKING consumed=116 produced=137 
[DEBUG] 2012-08-07 13:20:37,349 : [Session-1, SSL_NULL_WITH_NULL_NULL] [email protected] SSL NOT_HANDSHAKING i/o/u=0/0/0 ishut=false oshut=false {WebSocketClientConnection [email protected] state=OPCODE buffer=null [email protected] closed=false buffer=0} NOT_HANDSHAKING filled=0/0 flushed=137/0 
[DEBUG] 2012-08-07 13:20:37,349 : [Session-1, SSL_NULL_WITH_NULL_NULL] [email protected] SSL NOT_HANDSHAKING i/o/u=0/0/0 ishut=false oshut=false {WebSocketClientConnection [email protected] state=OPCODE buffer=null [email protected] closed=false buffer=0} NOT_HANDSHAKING filled=0/0 flushed=0/0 
[DEBUG] 2012-08-07 13:20:37,349 : [Session-1, SSL_NULL_WITH_NULL_NULL] handle [email protected] SSL NOT_HANDSHAKING i/o/u=0/0/0 ishut=false oshut=false {WebSocketClientConnection [email protected] state=OPCODE buffer=null [email protected] closed=false buffer=-1} progress=false 

私にはこれがCometDハンドシェイクが完了していることを意味しますが、SSLハンドシェークそうではありません。しかし、なぜこれが当てはまるのか理解できません。私のHTTPS呼び出しにも同様のアプローチが働いています。私に頭痛を与えているのはWSSだけです。

AndroidアプリやJettyサーブレットコンテナなど、さまざまな環境でこれを再現できることにも言及する価値があります。

WSSを自己署名証明書で正常に使用した人はいますか?私が間違っていることについていくつかの光を当てるように気をつけますか?

+0

私がしているように、面白くない情報として、誰かがエラーコード 'SSL_NULL_WITH_NULL_NULL'を見つけることはありますか?:) –

+0

'SSL_NULL_WITH_NULL_NULL'は、ほとんどの場合、認証や暗号化を提供していないnull暗号スイートを指しています。 – Bruno

+0

@ブリュノ:それを拡張できますか?ロギング出力から判断すると、私の暗号スイートは* anything *だがNULL(数十のエントリを持つように見える)です。 –

答えて

5

2番目のコードブロックでは、「エラー」は発生していません。これは、構成されていないSslContextFactoryの通常の出力です。これは、ヌル暗号スイートと、常に承認された証明書ベリファイアを提供します。 さらにここをクリックSslContextFactoryconfigurationを参照してください。

ログから、どちらの場合でも動作しています。

自己署名証明書を使用する場合は、SslContextFactoryを信頼ストアで構成して、証明書の検証で自己署名証明書を検証できるようにすることをお勧めします。

それ以外は、コードを正しく設定しているようです。

2

WebSocketClientFactoryについてよく分かりませんが、私が理解する限り、それはクライアント側の設定であり、基本的に自己署名入りの証明書で構成されたサーバーに接続しようとしています。クライアントのcustom.jksファイルに保存されます。

クライアント側で自己署名証明書を受け入れるために必要なものは、(この側からのクライアント証明書認証に使用される)キーストアを設定するのではなく、そのトラストストアを設定することです。

setKeyStore*setTrustStore*に置き換えてください。

関連する問題