Несколько SSL сертификатов на один IP
Понедельник, октября 10, 2011
Пришло время тотальной секурности. Не прошло оно и мимо нас. Срочно понадобилось навесить на разные виртуалхосты разные сертификаты. Уже делал такое, почему не записал тогда .. не знаю. Пишу сейчас. Возможно будет нужно в будущем.
Все это относится к CentOS 5.5, 5.6.
Установить gnutls:
yum install gnutls
С этим проблем никаких. Далее установить mod_gnutls. Но тут есть грабли, по крайней мере я наступал. После установки rpm модуля он не работает корректно и в логах сыпет:
[crit] GnuTLS: Unknown type '0' for SNI: 'example.com'
Если погуглить то грабли описаны и не раз.
Решение: собрать модуль руками.
Для этого доставить пакеты:
yum install httpd-devel gnutls-develСкачать исходники модуля:
wget http://www.outoforder.cc/downloads/mod_gnutls/mod_gnutls-0.2.0.tar.bz2
Далее поправить в файле src/gnutls_hooks.c строку
if (sni_type != GNUTLS_NAME_DNS) {на
if ((sni_type + 1) != GNUTLS_NAME_DNS) {и собрать модуль.
ВАЖНО!!! Во время компиляции будет создано два файла dhfile и rsafile
они будут в папке mod_gnutls-0.2.0/data/.
Обязательно скопировать их в папку конфигов апача
/etc/httpd/conf/ без них модуль не заработает.
Об этом нигде не написано и выяснено после курения логов
при попытке запустить апач с модулем.
Файл /etc/httpd/conf.d/mod_gnutls.conf привести к виду:
## Load the module into Apache. LoadModule gnutls_module modules/libmod_gnutls.so ## ## Set Certificate MIME-types, may instead be in ssl.conf AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl ## ## Set TLS Cache info GnuTLSCache dbm "/var/cache/mod_gnutls_cache/" GnuTLSCacheTimeout 300 ## Listen 1.2.3.4:443 ##
А файл /etc/httpd/conf/secvhosts.conf приготовить так:
NameVirtualHost 1.2.3.4:443 ## <VirtualHost 1.2.3.4:443> ServerName example.com:443 GnuTLSEnable on DocumentRoot "/path/to/your/www" GnuTLSCertificateFile /etc/cert/cert.crt GnuTLSKeyFile /etc/cert/private.key ErrorLog /var/log/httpd/websites/webmail/error_log CustomLog /var/log/httpd/websites/webmail/access_log combined </VirtualHost>
Генерация сертификата и запроса.
openssl genrsa -out name_of_key.key 2048 openssl req -new -key name_of_key.key -out name_of_key.csr
Вот и все. Остальные хосты добавлять по образу и подобию первого.
Как же он меня достал в процессе запуска. Чертова ошибка sni_type..
do not forget about package gnutls-utils