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