Назад | Перейти на главную страницу

proftpd: несколько сертификатов на основе VirtualHost

Я пытаюсь настроить следующую среду:

Существует один единственный FTP-сервер (Debian 9, proftpd 1.3.6-4), доступный через 1.2.3.4. Два домена, которые указывают на этот IP-адрес

У каждого из этих доменов есть свой сертификат.

Как я могу обслуживать оба сертификата с помощью 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, и это не вопрос.)