保存证书以与lftp一起使用


6

如何保存证书以便与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

Answers:


8

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

所以为了回答你的问题,我认为不可能出示证书。除非你能以某种方式将AUTH命令发送到FTP服务器。

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

openssl s_client -connect xxxx:21 -starttls ftp


4

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

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

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

set ssl:ca-file "/etc/ssl/certs/ca-certificates.crt"

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

sudo update-ca-certificates

如果您的系统没有此命令,您可以手动创建一个,如下所示:

cat /etc/ssl/certs/*.pem | sudo tee /etc/ssl/certs/ca-certificates.crt > /dev/null

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

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

set ftp:ssl-force false

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

set ssl:verify-certificate no

虽然这只适用于测试和测试帐户(为了不泄漏凭据)


0

在我的情况下,问题是由服务器仅支持现代发行版不支持的TLS折旧版本引起的。

测试你是否可以使用openssl连接:

$ openssl s_client  -starttls ftp -connect <hostname>:21

CONNECTED(00000003)
140140192228416:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../ssl/statem/statem_lib.c:1940:
---
<remaining text snipped>

此错误在此解释:https://stackoverflow.com/a/53065682/1878199,tl; dr; debian现在至少要求TLS 1.2。

您可以使用nmap检查服务器支持的内容:

$ nmap --script ssl-enum-ciphers -p 21 <hostname>

PORT   STATE SERVICE
21/tcp open  ftp
| ssl-enum-ciphers: 
|   SSLv3: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: client
|     warnings: 
|       CBC-mode cipher in SSLv3 (CVE-2014-3566)
|   TLSv1.0: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: client
|_  least strength: A

(另见https://security.stackexchange.com/a/70737

所以我的服务器只接受TLSv1.0。当然,正确的解决方案是更新服务器!

客户端可能的解决方案:

  1. 使用SSL $ lftp -e "set ftp:ssl-auth SSL" <hostname>
  2. 禁用此连接的SSL lftp -e "set ftp:ssl-allow no" <hostname>
  3. 您还可以尝试通过/etc/ssl/openssl.cnf上面第一个链接中所述的编辑在您的客户端上启用过时的协议。不建议。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.