gpt4 book ai didi

openssl - libcurl 与 OpenSSLUnknown SSL 协议(protocol)连接错误 -(无服务器问候) - 为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:58 25 4
gpt4 key购买 nike

我正在开发一个需要与不同 HTTPS 服务器通信的应用程序。在某些情况下,服务器会简单地忽略 SSL/TLS Client Hello(不返回 Server 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

返回码为:CURLE_SSL_CONNECT_ERROR

直接从 OpenSsl 运行时,这样就可以了:

OpenSSL> s_client -tls1 -connect <server>:443

我尝试了各种组合(指定 TLS、SSL 或不指定)。发生问题时唯一常见的情况是 SSL/TLS 版本不一致。所以在 WireShark 中,我将在 TCP 下看到安全套接字层:

  • SSL 记录层:握手协议(protocol):客户端问候 <===
    • 版本:TLS 1.0 (0x0301)
    • ...
    • 握手协议(protocol):客户问候
      • ...
      • 版本:TLS 1.0 (0x0301)

在正确的情况下,我会看到来自服务器的服务器问候,我会看到:

  • TLSv1 记录层:握手协议(protocol):客户端问候 <===
    • 版本:TLS 1.0 (0x0301)
    • ...
    • 握手协议(protocol):客户问候
      • ...
      • 版本:TLS 1.0 (0x0301)

我不完全确定这是 libcurl 问题,或者 WireShark 没有正确解码它(因为两种情况下的记录层看起来几乎相同,并且 2 个版本字段是正确的),使 libcurl 看起来是问题。

有什么想法吗?想法?相似经历?非常感谢任何帮助!!

最佳答案

我做了更多的测试和调试,发现有几个站点在使用 Curl(curl.exe -k -v --tlsv1 或不使用 --tlsv1)的默认或 TLSv1 时始终失败,但没问题使用 SSLv3。我很漂亮版本不是问题,因为 IE 连接使用 TLSv1 并且 openSSL 也可以使用 TLSv1。但是我没时间了,所以 SSLv3 将用作解决方法。

真正的问题可能是在 Client Hello 中发送的密码列表。指定一个肯定有效的密码后,SSL 就可以了:

curl.exe -k -v <site>                     # failed
curl.exe -k -v --ciphers RC4-MD5 <site> # now will connect

如果您遇到类似问题,这篇文章对我解决“SSL 未知 SSL 协议(protocol)错误”问题非常有用:

http://blog.techstacks.com/2010/03/3-common-causes-of-unknown-ssl-protocol-errors-with-curl.html

关于openssl - libcurl 与 OpenSSLUnknown SSL 协议(protocol)连接错误 -(无服务器问候) - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13463782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com