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, и здесь вопрос не в этом.)

Другие вопросы по тегам