Apache/GnuTLS: не может заставить несколько поддерживающих TLS виртуальных хостов работать

Только что я настроил полномочия сертификата SSL для нашей интранет, генерировал набор сертификатов и выполнил много сайтов с ними, всеми на том же физическом хосте с одной единственной установкой Apache2; один корневой сертификат и один сертификат для каждого виртуального хоста. Я добавил корневой сертификат клиентским машинам, и все было прекрасно (т.е. вся коммуникация была защищена).

Теперь я пытаюсь переключиться от mod_ssl кому: mod_gnutls. Изменения в конфигурации Apache2 были просты:

  • отключите модуль SSL: a2dismod ssl
  • включите модуль GnuTLS: a2enmod gnutls
  • добавьте новый раздел к /etc/apache2/ports.conf с тем же содержанием как раздел SSL:

    <IfModule mod_gnutls.c>
      NameVirtualHost *:443
      Listen 443
    </IfModule>
    
  • измените конфигурации на сайт в, например. /etc/apache2/sites-available/site1.domain-ssl:

    <IfModule mod_gnutls.c> 
      <VirtualHost *:443>
        ServerAdmin  webmaster@site1.domain
        ServerName   site1.domain
        DocumentRoot /var/www/site1.domain_ssl/public_html/
        ErrorLog     /var/www/site1.domain_ssl/logs/error.log
        CustomLog    /var/www/site1.domain_ssl/logs/access.log combined
        LogLevel     debug
    
        # <Directory ... > settings omitted
    
        # old SSL configuration:
        # SSLEngine on
        # SSLCertificateFile    /etc/ssl/certs/site1.cert.pem
        # SSLCertificateKeyFile /etc/ssl/private/site1.key.pem
    
        # new TLS configuration
        GnuTLSEnable on
        GnuTLSPriorities NORMAL:!DHE-RSA:!DHE-DSS:!AES-256-CBC:%COMPAT
        GnuTLSCertificateFile /etc/ssl/certs/site1.domain.cert
        GnuTLSKeyFile         /etc/ssl/private/site1.domain.key
      </VirtualHost>
    </IfModule>
    

Я воссоздал cetificate корневой сертификат полномочий с нуля, создал новые сертификаты на сайт и повторно развернул их. (Я раньше использовал .pem суффикс файла с SSL, но отбросил это при переключении на GnuTLS).

Проблема состоит в том теперь, когда я не могу получить доступ ни к каким виртуальным хостам.

Когда я пытаюсь соединиться с физическим хостом, все кажется прекрасным:

user@host:~$ gnutls-cli-debug host
Resolving 'host'...
Connecting to '127.0.1.1:443'...
Checking for SSL 3.0 support... yes
Checking whether %COMPAT is required... no
Checking for TLS 1.0 support... yes
Checking for TLS 1.1 support... yes
  ... (etc.) ...

и когда я соединяю использование gnutls-cli --x509cafile <my root cert file>, корневой сертификат проверен успешно.

Однако, когда я пытаюсь соединиться с одним из виртуальных хостов, это происходит:

user@host:~$ gnutls-cli-debug site1
Resolving 'site1'...
Connecting to '192.168.137.135:443'...
Checking for SSL 3.0 support...|<1>| Received record packet of unknown type 60
 no
Checking whether %COMPAT is required...|<1>| Received record packet of unknown type 60
 yes
Checking for TLS 1.0 support...|<1>| Received record packet of unknown type 60
 no
Checking for TLS 1.1 support...|<1>| Received record packet of unknown type 60
 no
  ... (etc.) ...

и я получаю сообщение об ошибке как они в журнале Apache:

[Mon May 19 17:55:35 2014] [info] [client 127.0.0.1] GnuTLS: Handshake Failed (-21) 'Could not negotiate a supported cipher suite.'
[Mon May 19 17:55:35 2014] [info] (70014)End of file found: GnuTLS: Error reading data. (-9) 'A TLS packet with unexpected length was received.'
[Mon May 19 17:59:58 2014] [error] [client 192.168.137.135] Invalid method in request \x16\x03

Конечно, существует много результатов Google об этих ошибках, но несмотря на расходы в значительной степени все выходные, ища, ничто окончательное подошли.

Это все происходит при новой установке последнего Debian 7.5 i386 на VM (который я настроил для нахождения ошибки, фактический сервер интранет является реальной машиной), таким образом, Apache действительно поддерживает SNI:

user@host:~$ aptitude show apache2-mpm-worker | grep Version
Version: 2.2.22-13+deb7u1
user@host:~$ aptitude show libapache2-mod-gnutls | grep Version
Version: 0.5.10-1.1

Ультрасовременная-gnutls страница explicitely указывает, что поддерживает Признак Имени сервера, но мне, похоже, что это - просто не случай.

Кто-либо может помочь мне?

2
задан 19 May 2014 в 20:57
1 ответ

После нескольких обсуждений с dkg в #mod_gnutls на irc.indymedia.org выяснилось, что версия по умолчанию 0.5.10-1.1 из mod-gnutls в последнем выпуске Debian 7. 5 (имя пакета libapache2-mod-gnutls) просто не поддерживает SNI должным образом - цитата из чата:

довольно много ошибок вокруг SNI было исправлено в последней 0.6 версии

AFAICT, версия 0.6 запланирована для Debian 8 (которая будет выпущена, когда закончится ;-) и, похоже, нет никаких бэкспортов. Одним из обходных путей является сборка mod-gnutls и его зависимость GnuTLS от исходных текстов; некоторые указатели на начало работы здесь и здесь.

.
1
ответ дан 3 December 2019 в 12:53

Теги

Похожие вопросы