Lftpで使用するために証明書を保存するにはどうすればよいですか?
問題の証明書は、サーバーからダウンロードされたときにlftpによって受け入れられません。私は試した
_
openssl s_client -connect {HOSTNAME}:21 -showcerts
_
from リモートサーバーの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
_
ここでの問題は、FTPサーバーがプレーンFTPを使用しているが、明示的なSSL/TLSをサポートしていることだと思います。したがって、プロトコルに従うには、クライアントはFTPサーバーに接続し、AUTHコマンドを使用して暗号化を呼び出す必要があります。 (AUTHコマンドはプレーンテキストで送信されます)
ですから、あなたの質問に答えるために、私は証明書を提示することは不可能だと思います。何らかの方法でAUTHコマンドをFTPサーバーに送信できる場合を除きます。
編集:証明書を表示するには、次のようにします。
openssl s_client -connect x.x.x.x:21 -starttls ftp
多くのシステムでlftpが正しく構成されていないため、サーバー証明書を検証できないようです。多分これがあなたの問題の根本的な原因です。
Webには、証明書の検証または暗号化を完全に無効にすることでこれを修正するための提案がたくさんあります。これはunsecureであり、man-in-the-middle攻撃が気付かれずに通過する可能性があります。
より良い解決策は、証明書の検証を正しく構成することです。これは幸いなことに簡単です。これを行うには、次の行を/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
このエンドポイントはSSLを使用して正しく保護されていますか?あなたが示すエラーメッセージから、サーバーがSSLを提供していないように見えますか?また、ポート21は、FTPやSFTPではなくplainftpに主に使用されます。
これは、プレーン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
これは、テストおよびテストアカウントでのみ許可されます(資格情報を漏らさないため)
私の場合、問題の原因は、サーバーが最新のディストリビューションではサポートされていない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のみを受け入れます。もちろん、正しい解決策はサーバーを更新することです。
クライアント側で考えられる解決策:
$ lftp -e "set ftp:ssl-auth SSL" <hostname>
lftp -e "set ftp:ssl-allow no" <hostname>
/etc/ssl/openssl.cnf
を編集して、クライアントで廃止されたプロトコルを有効にすることもできます。推奨されません。