Давайте рассмотрим порядок действий и настройку SSL сертификата в apache2. В сети довольно много гайдов. Все они примерно следуют одному и тому же алгоритму.
Нам будут нужны три вещи:
- Файлы сертификата, ключа, и цепочки сертификатов.
- Создать дополнительные настройки виртуального хоста, гда подключаются файлы сертификатов.
- Применить новые настройки и проверить их.
Файлы SSL сертификата
Они у вас должны быть. Как их генерировать или где-то получить я рассказывать не буду. Пусть это будет SSL-серт, выпущенный для домена testdomain.com.
Создайте папку (если её нет) в каталоге с настройками apache — /etc/apache2/ssl. Вообще, место для размещения ключей принципиального значения не имеет.
Full.crt — это файл с цепочкой сертификатов, там повторяется SSL сертификат, после него идет корневой, а заканчивается список — промежуточным сертификатом. Каждый из них идет в собственных рамках и выглядит вот так:
1 2 3 |
-----BEGIN CERTIFICATE----- тут код сертификата -----END CERTIFICATE----- |
Настройка виртуального хоста
Классическая настройка с мультисайтингом выглядит как набор отдельных конфигураций виртуальных хостов в папке /etc/apache2/sites-available.
Найдите там нужный файл настроек для вашего testdomain.com сайта. Создайте его копию, например, с именем testdomain.com.ssl.
Вот что нужно будет добавить/поменять в настройках:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# нам нужен 443 порт (по дефолту для ssl) <VirtualHost *:443> # в начале проверьте SERVERNAME и SERVERALIAS ServerAdmin support@hosting.com ServerSignature On ServerName testdomain.com ServerAlias www.testdomain.com # после SuexecUserGroup вставьте код, # который цепляет файлы сертификатов SSLEngine on SSLCertificateFile /etc/apache2/ssl/testdomain.crt SSLCertificateKeyFile /etc/apache2/ssl/testdomain.key SSLCertificateChainFile /etc/apache2/ssl/testdomain.full.crt SSLProtocol All -SSLv2 -SSLv3 SSLCipherSuite kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2 SSLCompression off SSLHonorCipherOrder on # ну и дальше все остальные настройки как для хоста на 80м порту # ... </VirtualHost> |
SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile — как раз те директивы, которые показывают, где лежат подготовленные заранее файлы ключа и SSL-сертификатов.
Применить новые настройки и проверить их
Чтобы включить новый файл настроек, можно создать символик-линку на него в папке /etc/apache2/sites-enabled. Или воспользоваться командой:
1 |
a2ensite testdomain.com.ssl |
Включите модуль apache ssl, если он до сих пор не включен. Это можно сделать вручную (опять символик-линк в папке модулей) или специальной командой:
1 |
a2enmod ssl |
Не плохо бы протестировать конфигурацию перед перезапуском apache:
1 |
apache2ctl configtest |
Если вы увидите только надпись:
1 |
Syntax OK |
То все готово, и можно перезапустить сервер, к примеру вот так:
1 |
/etc/init.d/apache2 restart |
Несколько сайтов со своим сертификатом
Все что было выше — это обычные настройки, которые будут работать с одним сайтом точно. Если у вас разные сертификаты для разных сайтов, то возможно тестирование настроек выдаст следующее сообщение:
1 |
[warn] _default_ VirtualHost overlap on port 443, the first has precedence |
Речь идет о том, что сервер не отличает разные виртуальные хосты по имени для 443 порта по умолчанию. Для всех обращений по 443 порту будут использованы первые попавшиеся настройки virtualhost *:443.
Чтобы решить эту проблему добавьте в общий файл конфигурации apache директиву:
1 2 3 |
<ifModule mod_ssl.c> NameVirtualHost *:443 </ifMofule> |