ssl - 尽管有 --insecure 和 w/o 代理 : ssl3_get_record:wrong version number,但 curl 错误

标签 ssl curl ftps ftp-server

我正在使用 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/

相关文章:

java - 通过任何在线服务器测试 FTPS 和 SFTP

java - FTPSClient 返回 MalformedServerReplyException : cannot parse response code

python - 以编程方式检查网站的 SSL 证书是否过期

java - 如何从 Java 客户端通过 SSL 进行通信

java - 即使在 SpringMVC 中包含 keystore 证书后也无法对服务器进行身份验证

r - 在 CRAN pkg 中使用 ssl_verifypeer = FALSE?

google-app-engine - Google App Engine 是否支持自签名证书? (不是自定义域)

php - 修复 curl_exec 在 Windows 8 apache 中挂起

php - 使用 curl 检查 301 http 响应

java - URL与FTPS的连接