web-dev-qa-db-ja.com

lftpで使用する証明書を保存します

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_

6
Greg C

ここでの問題は、FTPサーバーがプレーンFTPを使用しているが、明示的なSSL/TLSをサポートしていることだと思います。したがって、プロトコルに従うには、クライアントはFTPサーバーに接続し、AUTHコマンドを使用して暗号化を呼び出す必要があります。 (AUTHコマンドはプレーンテキストで送信されます)

ですから、あなたの質問に答えるために、私は証明書を提示することは不可能だと思います。何らかの方法でAUTHコマンドをFTPサーバーに送信できる場合を除きます。

編集:証明書を表示するには、次のようにします。

openssl s_client -connect x.x.x.x:21 -starttls ftp

7
marcwho

多くのシステムで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
5
ingomueller.net

このエンドポイントは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

これは、テストおよびテストアカウントでのみ許可されます(資格情報を漏らさないため)

2
user35800

私の場合、問題の原因は、サーバーが最新のディストリビューションではサポートされていない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を編集して、クライアントで廃止されたプロトコルを有効にすることもできます。推奨されません。
0
ootwch