web-dev-qa-db-ja.com

proftpd:VirtualHostに基づく複数の証明書

次の環境をセットアップしようとしています。

1.2.3.4の下で到達可能な単一のFTPサーバー(Debian 9、proftpd 1.3.6-4)があります。そのIPアドレスを指している2つのドメイン

  • example1.com-> 1.2.3.4
  • example2.com-> 1.2.3.4

これらの各ドメインには独自の証明書があります。

Proftpdで両方の証明書を提供するにはどうすればよいですか?

これによると( ProFTPd:1つのIPアドレス上の複数のドメインVirtualHosts )それは可能であるはずです。

したがって、私の構成は次のようになります。

<VirtualHost example1.com>
    TLSEngine                               on
    TLSLog                                  /var/log/proftpd/tls.log
    TLSProtocol                             SSLv23
    TLSOptions                              NoCertRequest EnableDiags NoSessionReuseRequired
    TLSVerifyClient                         off
    TLSRSACertificateFile                   /etc/Apache2/ssl/cert-example1.com.pem
    TLSRSACertificateKeyFile                /etc/Apache2/ssl/privkey-example1.com.pem
</VirtualHost>

<VirtualHost example2.com>
    TLSEngine                               on
    TLSLog                                  /var/log/proftpd/tls.log
    TLSProtocol                             SSLv23
    TLSOptions                              NoCertRequest EnableDiags NoSessionReuseRequired
    TLSVerifyClient                         off
    TLSRSACertificateFile                   /etc/Apache2/ssl/cert-example2.com.pem
    TLSRSACertificateKeyFile                /etc/Apache2/ssl/privkey-example2.com.pem
</VirtualHost>

残念ながら、それらはどれも機能しません。 DNS名の代わりにIPアドレスを入力した場合、1つのドメインでのみ機能します。

デバッグをオンにして、何が起こっているかを確認しました。私はいつもno matching vhost found for 1.2.3.4メッセージを受け取ります

2
Vince

Windowsの場合:WinSCPを試してください。しばらくの間、その機能をサポートしています。

その機能を実装している他のクライアントを知りません。 FTP(S)は、ほとんどのアプリケーションでその機能の実装がそれほど簡単ではないはずなので、最近ではまったく範囲外になっていると思います。


編集:@RalfFriedlの要求に応じて、この機能がクライアントサポートに依存する理由の説明を含めてください:

サーバーがクライアントが期待するホスト名に応じて異なるSSL証明書をクライアントに配信できるようにするには、サーバーがクライアントが期待するホスト名を知る必要があります。
サーバーに到着するTCP/IP接続自体には、この情報は含まれていません(数値のIPアドレスとTCPポート番号)でのみ機能します)。
したがって、同じアドレスとポートに対して、サーバーがクライアントの期待に応じて異なる証明書を送信したい場合、クライアントは情報を提供する必要があります。

FTP(E)S名ベースの仮想ホストの場合、クライアントはSSLネゴシエーションを開始する前に、期待されるホスト名をパラメーターとして使用してHostコマンドを送信し、サーバーがクライアントが通信するホスト名を認識できるようにします。証明書がクライアントに送信されるSSLへの接続のプロモート。
(もちろん、このメカニズムは、サーバーがターゲットのホスト名に基づいて異なるコンテンツなどを配信するためだけにSSLなしで使用することもできます。ProFTPdがこれを行うかどうかはわかりません。これはここでの問題ではありません。)

2
EOhm