build立stunnel服务器的问题:`SSL3_GET_CLIENT_HELLO:错误的版本号`

我在Windows XP上设置了一个stunnel服务器,当客户端试图访问时,我得到这个错误:

 2013.02.14 00:02:16 LOG7[8848:7664]: Service [https] accepted (FD=320) from 107.20.36.147:56160 2013.02.14 00:02:16 LOG7[8848:7664]: Creating a new thread 2013.02.14 00:02:16 LOG7[8848:7664]: New thread created 2013.02.14 00:02:16 LOG7[8848:9792]: Service [https] started 2013.02.14 00:02:16 LOG5[8848:9792]: Service [https] accepted connection from 107.20.36.147:56160 2013.02.14 00:02:16 LOG7[8848:9792]: SSL state (accept): before/accept initialization 2013.02.14 00:02:16 LOG7[8848:9792]: SSL alert (write): fatal: handshake failure 2013.02.14 00:02:16 LOG3[8848:9792]: SSL_accept: 1408A10B: error:1408A10B:SSL routines:SSL3_GET_CLIENT_HELLO:wrong version number 2013.02.14 00:02:16 LOG5[8848:9792]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket 2013.02.14 00:02:16 LOG7[8848:9792]: Local socket (FD=320) closed 2013.02.14 00:02:16 LOG7[8848:9792]: Service [https] finished (0 left) 

任何想法该怎么办? 我在网上阅读,这可能意味着我的服务器是广告,它可以在SSL3通信,但实际上不能。 如果这是真的,我想知道如何解决这个问题。 我正在编辑stunnel.conf文件,但是我不知道要修改这个文件。

更新:

上述错误信息仅在Twilio客户端(即Twilio的服务器)尝试访问我的服务器时才显示。 当我尝试用我的一台计算机访问我的服务器时,页面显示出来,但在显示内容后,Chrome显示页面为“加载”大约30秒钟,最后, stunnel发出以下消息:

 transfer: s_poll_wait: TIMEOUTclose exceeded: closing 

更新:

这里是wireshark捕获: https : //gist.github.com/cool-RR/4963477

上限文件: https : //dl.dropbox.com/u/1927707/wireshark.cap

请注意,服务器在端口8088上运行。

更新:

这是来自服务器的日志(debug = 7):

 2013.02.17 17:06:52 LOG7[7636:2092]: No limit detected for the number of clients 2013.02.17 17:06:52 LOG5[7636:2092]: stunnel 4.54 on x86-pc-msvc-1500 platform 2013.02.17 17:06:52 LOG5[7636:2092]: Compiled/running with OpenSSL 1.0.1c-fips 10 May 2012 2013.02.17 17:06:52 LOG5[7636:2092]: Threading:WIN32 SSL:+ENGINE+OCSP+FIPS Auth:none Sockets:SELECT+IPv6 2013.02.17 17:06:52 LOG5[7636:2092]: Reading configuration from file stunnel.conf 2013.02.17 17:06:52 LOG5[7636:2092]: FIPS mode is enabled 2013.02.17 17:06:52 LOG7[7636:2092]: Compression not enabled 2013.02.17 17:06:52 LOG7[7636:2092]: Snagged 64 random bytes from C:\Documents and Settings\User/.rnd 2013.02.17 17:06:52 LOG7[7636:2092]: Wrote 1024 new random bytes to C:\Documents and Settings\User/.rnd 2013.02.17 17:06:52 LOG7[7636:2092]: PRNG seeded successfully 2013.02.17 17:06:52 LOG6[7636:2092]: Initializing service [https] 2013.02.17 17:06:52 LOG7[7636:2092]: Certificate: G:\Dropbox\StartSSL\SSL Cert.pem 2013.02.17 17:06:52 LOG7[7636:2092]: Certificate loaded 2013.02.17 17:06:52 LOG7[7636:2092]: Key file: G:\Dropbox\StartSSL\SSL Cert.pem 2013.02.17 17:06:52 LOG7[7636:2092]: Private key loaded 2013.02.17 17:06:52 LOG7[7636:2092]: Could not load DH parameters from G:\Dropbox\StartSSL\SSL Cert.pem 2013.02.17 17:06:52 LOG7[7636:2092]: Using hardcoded DH parameters 2013.02.17 17:06:52 LOG7[7636:2092]: DH initialized with 2048-bit key 2013.02.17 17:06:52 LOG7[7636:2092]: ECDH initialized with curve prime256v1 2013.02.17 17:06:52 LOG7[7636:2092]: SSL options set: 0x03000004 2013.02.17 17:06:52 LOG5[7636:2092]: Configuration successful 2013.02.17 17:06:52 LOG7[7636:2092]: Service [https] (FD=268) bound to 0.0.0.0:8088 2013.02.17 17:07:08 LOG7[7636:2092]: Service [https] accepted (FD=320) from 54.242.25.199:45922 2013.02.17 17:07:08 LOG7[7636:2092]: Creating a new thread 2013.02.17 17:07:08 LOG7[7636:2092]: New thread created 2013.02.17 17:07:08 LOG7[7636:8004]: Service [https] started 2013.02.17 17:07:08 LOG5[7636:8004]: Service [https] accepted connection from 54.242.25.199:45922 2013.02.17 17:07:08 LOG7[7636:8004]: SSL state (accept): before/accept initialization 2013.02.17 17:07:08 LOG7[7636:8004]: SSL alert (write): fatal: handshake failure 2013.02.17 17:07:08 LOG3[7636:8004]: SSL_accept: 1408A10B: error:1408A10B:SSL routines:SSL3_GET_CLIENT_HELLO:wrong version number 2013.02.17 17:07:08 LOG5[7636:8004]: Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket 2013.02.17 17:07:08 LOG7[7636:8004]: Local socket (FD=320) closed 2013.02.17 17:07:08 LOG7[7636:8004]: Service [https] finished (0 left) 

更新:

这是我的stunnel.conf文件。

你应该做一个networking捕捉,看看为什么被拒绝。 同时检查两端的日志。 增加stunnel conf中的debug级别。

您需要进行networking跟踪,以确定客户端支持哪种版本的SSL协议。 然后确保您的服务器也支持该版本。

客户端发送ClientHello消息,指定其支持的最高TLS协议版本,随机数,build议的CipherSuite列表以及build议的压缩方法。

资源

请注意,由于重新协商中的安全性问题,SSL协议在几年前发生了变化。 有关SSL重新协商,请参阅CVE-2009-3555和此页面

服务器正在响应:

 Secure Sockets Layer SSLv3 Record Layer: Alert (Level: Fatal, Description: Handshake Failure) Content Type: Alert (21) Version: SSL 3.0 (0x0300) Length: 2 Alert Message Level: Fatal (2) Description: Handshake Failure (40) 

您必须检查SSL服务器上的日志以了解为什么拒绝连接。 尝试使用以下命令在stunnel上启用SSLdebugging: debug=7

stunnel服务器具有options = NO_SSLv3 ,但客户options = NO_SSLv3在尝试使用SSLv3进行连接。 您需要升级客户端以支持较新版本的SSL,或者您需要将stunnelconfiguration更改为接受SSLv3。

这可能是客户端和服务器之间的SSL版本不匹配。 确保客户端仅configuration为SSL3,方法是禁用客户端上较早的SSL版本。