Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绕过TLS证书不匹配_Java_Ssl_Websocket_Proxy_Fiddler - Fatal编程技术网

Java 绕过TLS证书不匹配

Java 绕过TLS证书不匹配,java,ssl,websocket,proxy,fiddler,Java,Ssl,Websocket,Proxy,Fiddler,我试图捕获基于和服务器的java客户端之间的websocket通信wss://echo.websocket.org 使用小提琴手。通过使用Proxifier或ProxyCap将客户端重定向到localhost:8888,我可以侦听非安全连接ws://的消息。但是,对于TLS,我得到一个错误:对等方的证书与预期的主机名echo.websocket.org不匹配。如何在不修改客户端源代码的情况下解决此问题?使用browserchrome/firefox,我可以毫无问题地查看所有内容,我信任Fiddl

我试图捕获基于和服务器的java客户端之间的websocket通信wss://echo.websocket.org 使用小提琴手。通过使用Proxifier或ProxyCap将客户端重定向到localhost:8888,我可以侦听非安全连接ws://的消息。但是,对于TLS,我得到一个错误:对等方的证书与预期的主机名echo.websocket.org不匹配。如何在不修改客户端源代码的情况下解决此问题?使用browserchrome/firefox,我可以毫无问题地查看所有内容,我信任Fiddler的根证书。我正在使用Windows7

使用更多信息编辑: 我尝试了EricLaw的解决方案,但结果是一样的。我在客户端内部打印了验证步骤:

//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隧道到174.129.224.73:443代理:5840 没有对连接头SessionID:empty的响应。 我还尝试了协议的组合:;ssl3;tls1.0;tls1.1;tls1.2 我将fiddleroot.cer添加到JavaCacerts中。 我希望有更多的想法

编辑2 我安装了多个java版本,并将证书添加到错误的密钥库中。
最终的解决方案确实是oSession[x-OverrideCertCN]=*.websocket.org;在OnBeforeRequest函数+cacert update中。

最简单的机制是配置Fiddler,将证书的主机名设置为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";
}

我也有同样的问题,但上面的解决方案似乎对我不起作用。如果这不是生产,禁用主机名验证将是客户端上最简单的解决方案。