【发布时间】:2019-08-02 17:48:24
【问题描述】:
我正在尝试使用 curl (https) 从服务器 A 连接到服务器 B。我已经尝试过 -k 并且它不起作用。
我查看了几篇帖子,并在 link 上发现了博客,但问题仍然存在。
当我从服务器 A 执行 curl 时,出现以下错误:
* Rebuilt URL to: https://x.x.x.x:8443/
* Hostname was NOT found in DNS cache
* Trying x.x.x.x...
* Connected to x.x.x.x (x.x.x.x) port 8443 (#0)
* successfully set certificate verify locations:
* CAfile: /tmp/cert_test/certRepo
CApath: /etc/ssl/certs/
* SSLv3, TLS handshake, Client hello (1):
* error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
* Closing connection 0
curl: (35) error:140770FC:**SSL routines:SSL23_GET_SERVER_HELLO:**unknown protocol
我从浏览器进入服务器 B (https://x.x.x.x:8443/) 并下载了根证书、中间证书和客户端证书。按照博客中的建议,我创建了一个新文件夹并将所有公共证书合并到一个目录中并尝试执行 curl 命令
curl -v --cacert /tmp/cert_test/certRepo https://x.x.x.x:8443
我得到 GET_SERVER_HELLO:unknown protocol
有什么想法吗?
来自客户端机器的 Curl 版本:
curl 7.37.0 (x86_64-suse-linux-gnu)
libcurl/7.37.0 OpenSSL/0.9.8j
zlib/1.2.7
libidn/1.10
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet
tftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz
我非常确定 服务器 正在使用 TLSv1.2。
【问题讨论】:
-
"GET_SERVER_HELLO:unknown protocol" 通常意味着您正在连接到根本不使用 TLS 的东西。确保它配置正确。这不可能是证书问题,因为这是在此之后发生的,您的客户端在这里发送了它的 ClientHello TLS 记录,并期望返回一个 ServerHello TLS 记录,但是却是垃圾(不是 TLS)。 HTTPS url 中的 IP 地址也不是一个好主意。这与编程不是很相关,所以这里暂时离题。
-
@PatrickMevzek 服务器确实理解 TLS v 1.2,因为其他应用程序正在正确连接到它。有什么方法可以在 CURL、TLS 版本中指定吗?
-
@PatrickMevzek 我已经使用主机名完成了设置,不再使用 IP 地址。
-
@PatrickMevzek 我注意到:SSLv3,TLS 握手,客户端你好(1):,服务器理解....可能是 curl 使用的是 sslv3 而服务器只理解 TLS v1.2 ?有什么想法吗?
-
能否添加测试
https://x.x.x.x:8443/的输出,由github.com/drwetter/testssl.sh制作,好吗?将列出所有支持的 TLS 版本/密码。