如何保存用于 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)
尽管这仅适用于测试和测试帐户(为了不泄露凭据)
归档时间: |
|
查看次数: |
22165 次 |
最近记录: |