我正在使用 git-ftp 来部署一些站点,但对于一台服务器,我无法通过 TLS 建立连接。
curl -vv --insecure ftps://linux12.unixserver.org:21
* Rebuilt URL to: ftps://linux12.unixserver.org:21/
* Trying 212.63.145.118...
* TCP_NODELAY set
* Connected to linux12.unixserver.org (212.63.145.118) port 21 (#0)
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number
我已经找到了其他几个问题,但我的问题不匹配。
- 我没有使用代理
- 即使
--insecure
也会失败,所以这不可能是证书信任问题 - 我也尝试了
--cacert
,但没有用 --tls-max 1.2
将版本更改为 1.2,但不会更改任何内容
一些消息来源指出,当服务器根本不提供证书时也会发生此错误。
openssl s_client -connect linux12.unixserver.org:21 -starttls ftp
提供证书,所以这似乎没问题。
我可以通过 Nautilus 成功连接,但它警告我关于证书,颁发者未知。
非常感谢您提供有关其他尝试的任何提示。
最佳答案
这个案例其实涉及到两个问题。
1) ftps
对于只支持explicit tls 的服务器来说是错误的协议(protocol)。
正确的协议(protocol)应该是 ftpes
.如果 curl 没有编译支持它,你可以使用 --ssl-reqd
强制执行 TLS,或者只是 --ssl
.
在 git-ftp 的上下文中,即使 curl 是在没有 ftpes
的情况下编译的,它也能正常工作.
2) 服务器未提供有效的证书链,因此无法验证证书。
目前这是一个 ftp certificate bug in plesk .
解决方案是手动检索证书链并通过--cacert <file>
提供链。 .如果是自签名的,提取公钥并使用 --pinnedpubkey <file>
.
非常感谢 Daniel Stenberg 的正确提示。
关于ssl - 尽管有 --insecure 和 w/o 代理 : ssl3_get_record:wrong version number,但 curl 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54946675/