Самый дешевый SSL сертификат Comodo PositiveSSL и после оплаты получается набор из 4 файлов:
- AddTrustExternalCARoot.crt
- COMODORSAAddTrustCA.crt
- COMODORSADomainValidationSecureServerCA.crt
- domain_name.crt – сертификат для моего домена
Приватный ключ был выдан отдельно, его нужно сохранить в текстовый файл, например:
1 |
domain_name_ca_private.key |
В настройках сервера поттребуется указать путь к цепочке сертификатов, для создания цепочки сертификатов необходимо перейти в каталог с сертификатами и выполните команду:
1 |
cat domain_name.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > domain.ca-bundle |
В результате выполнения этой команды в каталоге будет создан файл domain.ca-bundle с цепочкой сертификатов.
Сертификаты есть, цепочку создали, осталось указать их в настройках сервера (apache + nginx):
- Проверьте, какой веб сервер работает на 443 (SSL) порту, для этого в терминале введите команду:для Linux:
1netstat -napt | grep 443
1sockstat | grep 443 - Если на 443 порту весит apache, то зайдите в файл:
1/etc/apache2/ports.conf
1Listen 443 - Так как ssl-соединениями будет заниматься nginx, то настройки производятся только в его конфиге:
1/etc/nginx/sites-available/domain.conf -
12345678910111213141516171819# Настраиваем редирект с http на htpsserver {listen 80;root /home/myitstuff/myitstuff.ru/public_html; # путь к папке с сайтомserver_name myitstuff.ru www.myitstuff.ru; # доменные именаreturn 301 https://myitstuff.ru$request_uri; # непосредственно редирект на https}server {listen 443;server_name myitstuff.ru www.myitstuff.ru;ssl on; # включаем поддержку sslssl_certificate /etc/ssl/crt/myitstuff_ru.ca-bundle; # файл цепочки сертификатовssl_certificate_key /etc/ssl/crt/www_myitstuff_ru_private.key; # приватный ключ......... остальные настройки .........}
- Перезагрузите apache и nginx:
12/etc/init.d/apache2 restart/etc/init.d/nginx restart - Проверьте правильность установки сертификата на сайте www.sslshopper.com/ssl-checker.html
Сложности начались при работе ajax. Асинхронные запросы к серверу выполнялись с префиксом http:// что вызывало губительный для ajax редирект 301. Появилась необходимость передавать переменные окружения, в частности имя протокола, из nginx в apache, сделано это было так:
в nginx:
1 2 3 4 5 6 7 8 9 |
server { ... location / { ... proxy_set_header X-Forwarded-Proto $scheme; ... } ... } |
Самое главное в apache надо в определении виртуального хоста прописать:
1 2 3 4 5 6 |
<VirtualHost 127.0.0.1:8080> ServerName www.blabla.ru ... SetEnvIf X-Forwarded-Proto https HTTPS=on ... </VirtualHost> |
Теперь все ajax запросы идут на https:// что и требовалось. Для этого трюка модуль apache setenvif_module должен быть установлен и включен в конфиге:
LoadModule setenvif_module libexec/apache22/mod_setenvif.so
Также стоит иметь ввиду что некоторые приложения могут сами определять свой путь по переменным окружения. Так например phpMyAdmin, так нужный разработчикам ресурса, в случае если у него в конфиге не указан полный путь будет формировать его сам с указанием порта.
Еще не стоит забывать о передаче реальных IP адресов посетителей в apache для сохранения имеющейся схемы ведения логов. Это расписано неоднократно, копайте в сторону модуля apache rpaf_module.
Стоит еще заметить, что для работы необходимо наличие открытого портала в фаерволе, для этого проверяет список того, что открыто (для Linux CentsOS < 7): /etc/sysconfig/iptables или команда для просмотра iptables -L -n (где n – это ключ для того, что бы адреса и порты выводились в числовом виде). Перезагрузка через команду service iptables restart и\или service ip6tables restart