Только что я настроил полномочия сертификата SSL для нашей интранет, генерировал набор сертификатов и выполнил много сайтов с ними, всеми на том же физическом хосте с одной единственной установкой Apache2; один корневой сертификат и один сертификат для каждого виртуального хоста. Я добавил корневой сертификат клиентским машинам, и все было прекрасно (т.е. вся коммуникация была защищена).
Теперь я пытаюсь переключиться от mod_ssl
кому: mod_gnutls
. Изменения в конфигурации Apache2 были просты:
a2dismod ssl
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 указывает, что поддерживает Признак Имени сервера, но мне, похоже, что это - просто не случай.
Кто-либо может помочь мне?
После нескольких обсуждений с 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
от исходных текстов; некоторые указатели на начало работы здесь и здесь.