2017-12-25 19 views
0

https://github.com/TakahikoKawasaki/nv-websocket-clientに基づくJavaクライアントとFiddlerを使用するサーバーwss://echo.websocket.orgとの間のwebsocket通信をキャプチャしようとしています。クライアントをlocalhost:8888にリダイレクトして非セキュア接続(ws://)を聞いて、ProxifierまたはProxyCapで聞くことができます。しかし、TLSではエラーが発生します:The certificate of the peer does not match the expected hostname (echo.websocket.org)。クライアントのソースコードを変更せずにこの問題を解決するにはどうすればよいですか?ブラウザ(chrome/firefox)では問題なくすべてを見ることができます(私はFiddlerのルート証明書を信頼します)。
私はEricLawソリューションを試みたが、結果は同じである:私はより多くの情報をTLS証明書の不一致を回避する

編集をWindows 7を使用しています。私は、クライアントの内部検証手順を印刷:

フィドラーインサイド
//direct connection: 
(SocketConnector)mSocket.InetAddress: echo.websocket.org/174.129.224.73 
(SocketConnector)mSocket.getLocalSocketAddress: /192.168.0.100:2044 
(SSLSession)verify: host=echo.websocket.org 
(SSLSession)verify: cipher suite=TLS_RSA_WITH_AES_128_CBC_SHA256 
(SSLSession)verify: peer host=echo.websocket.org 
(SSLSession)verify: session.toString=[Session-1, 
TLS_RSA_WITH_AES_128_CBC_SHA256] 
verifyHostName: hostName=echo.websocket.org, pattern=*.websocket.org 
VERIFIED! 

//proxy+fiddler: 
(SocketConnector)mSocket.InetAddress: echo.websocket.org/174.129.224.73 
(SocketConnector)mSocket.getLocalSocketAddress: /127.0.0.1:2039 
(SSLSession)verify: host=echo.websocket.org 
(SSLSession)verify: cipher suite=SSL_NULL_WITH_NULL_NULL 
(SSLSession)verify: peer host=null 
(SSLSession)verify: session.toString=[Session-1, SSL_NULL_WITH_NULL_NULL] 


200 HTTP Tunnel to 174.129.224.73:443 proxifier:5840
CONNECTヘッダSessionID: empty)への応答がありません。 私はまた、Protocols: <client>;ssl3;tls1.0;tls1.1;tls1.2
と私はFiddlerRoot.cerをjava cacertsに追加しました。
私はより多くのアイデアに感謝します。

編集2
私は、複数のバージョンのJavaがインストールされていたと私は間違ったキーストアに証明書を追加しました。 最後の解決策は確かにoSession["x-OverrideCertCN"] = "*.websocket.org";OnBeforeRequest function + cacert updateです。

答えて

1

最も単純なメカニズムは、証明書のホスト名をecho.websocket.org(または何でも)に設定するようにフィドラーを構成することです。

// Put the correct IP address or hostname in the next line. 
if (oSession.uriContains("1.2.3.4")) { 
    oSession["x-OverrideCertCN"] = "*.websocket.org"; 
} 
関連する問題