次の環境をセットアップしようとしています。
1.2.3.4
の下で到達可能な単一のFTPサーバー(Debian 9、proftpd 1.3.6-4)があります。そのIPアドレスを指している2つのドメイン
1.2.3.4
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
メッセージを受け取ります
Windowsの場合:WinSCPを試してください。しばらくの間、その機能をサポートしています。
その機能を実装している他のクライアントを知りません。 FTP(S)は、ほとんどのアプリケーションでその機能の実装がそれほど簡単ではないはずなので、最近ではまったく範囲外になっていると思います。
編集:@RalfFriedlの要求に応じて、この機能がクライアントサポートに依存する理由の説明を含めてください:
サーバーがクライアントが期待するホスト名に応じて異なるSSL証明書をクライアントに配信できるようにするには、サーバーがクライアントが期待するホスト名を知る必要があります。
サーバーに到着するTCP/IP接続自体には、この情報は含まれていません(数値のIPアドレスとTCPポート番号)でのみ機能します)。
したがって、同じアドレスとポートに対して、サーバーがクライアントの期待に応じて異なる証明書を送信したい場合、クライアントは情報を提供する必要があります。
FTP(E)S名ベースの仮想ホストの場合、クライアントはSSLネゴシエーションを開始する前に、期待されるホスト名をパラメーターとして使用してHostコマンドを送信し、サーバーがクライアントが通信するホスト名を認識できるようにします。証明書がクライアントに送信されるSSLへの接続のプロモート。
(もちろん、このメカニズムは、サーバーがターゲットのホスト名に基づいて異なるコンテンツなどを配信するためだけにSSLなしで使用することもできます。ProFTPdがこれを行うかどうかはわかりません。これはここでの問題ではありません。)