Я пытаюсь настроить следующую среду:
Существует один единственный FTP-сервер (Debian 9, proftpd 1.3.6-4), доступный через 1.2.3.4
. Два домена, которые указывают на этот IP-адрес
1.2.3.4
1.2.3.4
У каждого из этих доменов есть свой сертификат.
Как я могу обслуживать оба сертификата с помощью proftpd?
Согласно этому (ProFTPd: несколько виртуальных хостов домена на одном IP-адресе) это должно быть возможно.
Итак, моя конфигурация будет выглядеть так:
<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>
К сожалению, ни один из них не работает. Он работает только для одного домена, если я помещаю в него IP-адрес вместо имени DNS.
Я включил отладку, чтобы посмотреть, что происходит. Я всегда получаю no matching vhost found for 1.2.3.4
сообщение
Для Windows: попробуйте WinSCP, он уже давно поддерживает эту функцию.
Я не знаю другого клиента, который бы реализовал эту функцию. Я предполагаю, что FTP (S) в настоящее время выходит за рамки возможностей, поскольку реализация этой функции должна быть более простой задачей в большинстве приложений.
Изменить: включить некоторые объяснения, почему эта функция зависит от поддержки клиентов, по запросу @RalfFriedl:
Чтобы сервер мог доставлять клиенту разные сертификаты SSL в зависимости от имени хоста, ожидаемого клиентом, ему необходимо знать, какое имя хоста ожидает клиент.
Само соединение TCP / IP, которое поступает на сервер, не включает эту информацию (оно работает только с числовыми IP-адресами и номерами портов TCP).
Поэтому, если для одного и того же адреса и порта сервер хочет отправлять разные сертификаты в зависимости от того, что ожидает клиент, клиент должен предоставить информацию.
В случае виртуальных хостов на основе имен FTP (E) S клиент отправляет команду HOST с ожидаемым именем хоста в качестве параметра, прежде чем он инициирует согласование SSL, чтобы сервер мог узнать, с каким именем хоста клиент хочет поговорить, прежде чем инициировать продвижение соединения с SSL, во время которого сертификат отправляется клиенту.
(Этот механизм, конечно, также может использоваться без SSL только для того, чтобы сервер доставлял различный контент или что-то подобное на основе имени целевого хоста. Я не знаю, делает ли это ProFTPd, и это не вопрос.)