Openssl 连接中存在已知SSL协议错误的libcurl(无服务器Hello)-为什么?

Openssl 连接中存在已知SSL协议错误的libcurl(无服务器Hello)-为什么?,openssl,libcurl,wireshark,ssl,Openssl,Libcurl,Wireshark,Ssl,我正在开发一个需要与不同HTTPS服务器对话的应用程序。有些情况下,服务器只是忽略SSL/TLS客户机Hello(不返回服务器Hello) 问题会在代码中表现出来: >curl32.exe -v -k --tlsv1 https://... * timeout on name lookup is not supported * About to connect() to <server> port 443 (#0) * Trying <IP>... * conn

我正在开发一个需要与不同HTTPS服务器对话的应用程序。有些情况下,服务器只是忽略SSL/TLS客户机Hello(不返回服务器Hello)

问题会在代码中表现出来:

>curl32.exe -v -k --tlsv1 https://...
* timeout on name lookup is not supported
* About to connect() to <server> port 443 (#0)
*   Trying <IP>...
* connected
* Connected to <server> (<IP>) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: ./cacert.test.pem
  CApath: none
* Unknown SSL protocol error in connection to <Server>:443

* Closing connection #0
===> CURLcode is: 35
>curl32.exe-v-k--tlsv1https://...
*不支持名称查找超时
*即将将()连接到端口443(#0)
*努力。。。
*连接的
*已连接到()端口443(#0)
*已成功设置证书验证位置:
*CAfile:./cacert.test.pem
卡帕斯:没有
*连接到:443时出现未知SSL协议错误
*正在关闭连接#0
=>代码是:35
返回的代码是:CURLE\u SSL\u CONNECT\u ERROR

直接从OpenSsl运行时,这是可以的:

OpenSSL> s_client -tls1 -connect <server>:443
OpenSSL>s_客户端-tls1-connect:443
我尝试过各种组合(指定TLS、SSL或不指定)。发生问题时唯一常见的情况是SSL/TLS版本不一致。在WireShark中,我将看到TCP下的安全套接字层:


  • SSL记录层:握手协议:Client Hello我做了更多的测试和调试,发现有两个站点在使用Curl(Curl.exe-k-v--TLSv1,或no--TLSv1)默认或TLSv1时失败,但在使用SSLv3时没有问题。我很高兴这个版本不是问题,因为IE连接使用TLSv1和openSSL也可以使用TLSv1。但我没有时间了,所以SSLv3将用作解决方案

    真正的问题可能是在客户端Hello中发送的密码列表。在指定一个可以确保工作的密码后,SSL正常:

    curl.exe -k -v <site>                     # failed
    curl.exe -k -v --ciphers RC4-MD5 <site>   # now will connect
    
    curl.exe-k-v#失败
    curl.exe-k-v——现在将连接密码RC4-MD5
    
    如果您有类似的问题,本文对我解决“SSL未知SSL协议错误”问题非常有用:


    打字错误?它们看起来完全一样(至少从您粘贴的内容来看)。就客户而言,两者都是TLS 1.0。Wireshark默认在第一种情况下打印SSL,因为服务器没有发送Hello。可能在这种情况下--SSL allow beast会有所不同…谢谢@Rajesh。好的,所以我被WireShark的显示转移了注意力。我已经相应地更新了问题。@DanielStenberg谢谢你的提示!我试过了,但不幸的是,它对我不起作用。@MW如果你能让我们看看捕获的线鲨,那就容易多了。