保存证书以用于 lftp

Gre*_*g C 10 certificate ftps

如何保存用于 lftp 的证书?

从服务器下载时,lftp 不接受有问题的证书。我试过

openssl s_client -connect {HOSTNAME}:21 -showcerts

如何将远程服务器 SSL 证书本地保存为文件,但这会返回

CONNECTED(00000003) 3074045628:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:766:

no peer certificate available

我正在连接

lftp -p 21 -u {USER} {HOSTNAME}

并接收

ls: Fatal error: Certificate verification: Not trusted

mar*_*who 11

我认为这里的问题是 FTP 服务器使用普通 FTP 但支持显式 SSL/TLS。因此,要遵循该协议,客户端必须连接到 FTP 服务器并通过 AUTH 命令调用加密。(AUTH 命令以纯文本形式发送)

因此,为了回答您的问题,我认为无法出示证书。除非您能以某种方式将 AUTH 命令发送到 FTP 服务器。

编辑:要显示证书,请执行以下操作:

openssl s_client -connect xxxx:21 -starttls ftp


小智 7

似乎在许多系统上 lftp 没有正确配置,这使得它无法验证服务器证书。也许这是您问题的根本原因。

网络上充满了通过完全禁用证书验证或加密来解决此问题的建议。这是不安全的,因为它允许中间人攻击被忽视。

更好的解决方案是正确配置证书验证,这很容易,幸运的是。为此,将以下行添加到/etc/lftp.conf(或替代地~/.lftp/rc):

set ssl:ca-file "/etc/ssl/certs/ca-certificates.crt"
Run Code Online (Sandbox Code Playgroud)

ca-certificates.crt是一个包含系统所有 CA 证书的文件。上面使用的位置来自 Ubuntu,在不同的系统上可能会有所不同。要生成或更新文件,请运行update-ca-certificates

sudo update-ca-certificates
Run Code Online (Sandbox Code Playgroud)

如果您的系统没有此命令,您可以像这样手动创建一个:

cat /etc/ssl/certs/*.pem | sudo tee /etc/ssl/certs/ca-certificates.crt > /dev/null
Run Code Online (Sandbox Code Playgroud)


小智 2

您确定该端点已使用 SSL 正确保护吗?从您显示的错误消息来看,服务器似乎不提供 ssl?此外,端口 21 主要用于 plainftp,而不是 FTP 或 SFTP。

这是我在普通 FTP 服务器上运行命令时得到的结果

openssl s_client -connect xxx.yyy.zzz.www:21 -showcerts
CONNECTED(00000003)
140165093090976:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:749:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 225 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
Run Code Online (Sandbox Code Playgroud)

lftp 错误可能是由于需要 ssl 的 lftp 配置错误造成的。您可以尝试以下操作:

set ftp:ssl-force false
Run Code Online (Sandbox Code Playgroud)

无论如何,您也可以尝试使用连接

set ssl:verify-certificate no
Run Code Online (Sandbox Code Playgroud)

尽管这仅适用于测试和测试帐户(为了不泄露凭据)