Запись о том, как сгенерировать и настроить самый простой SSL-сертификат (Comodo Positive SSL) на веб-сервере Nginx.
Сертификат в данном примере заказывался не у Comodo непосредственно, а у его реселлера ssl.com.ua, за более привлекательную цену. Суть же от этого не меняется, так как сертификат всё равно генерирует и присылает сам Comodo.
План действий:
- Сгенерировать CSR (Certificate Signing Request)
- Использовать CSR для генерации сертификата
- Подготовить сертификат для использования с Nginx
- Включить SSL в Nginx с использованием сертификата
Сгенерировать CSR
Для создания сертификата любому центру сертификации требуется CSR (запрос на подписание сертификата).
Также, при генерации CSR создаётся приватный ключ сертификата, который будет использован для расшифровки данных, приходящих из браузера, и зашифрованных открытым ключём, содержащимся в сертификате.
Инструменты по генерации CSR есть на многих сайтах, в том числе, например, здесь: https://ssl.com.ua/online-CSR-generator/
Для генерации CSR нужно указать (исключительно на латинице):
1) Доменное имя, к примеру mydomain.ru
2) Название организации (если нет, то придумать), например MyCompany
3) Отдел организации: IT
4) Город, например Moscow
5) Область/штат, например Moscowskaya Oblast
6) Страна, например Россия (обычно вместо страны используется некий код, который задаётся выпадающим списком со странами)
7) Email, например admin@mydomain.ru
Поставить галочку на параметре «Отправить CSR и приватный ключ (RSA) на указанный адрес»
В результате получится CSR, выглядящий примерно так:
-----BEGIN CERTIFICATE REQUEST----- MIIC6TCCAQAwgaMxCzAJBgNVBAYTAlJVMR4wHAYDVQQIDBVMZW5pbmdy a2F5YSBPYmxhc3QxGTAXBgNVBAcMNhaW50LVBldGVyc2J1cmcxEjAQBg CVB1dGV2b3kyNDELGA1UECwwCSVQxFTATBgNVBAMMDHB1dGV2b3kyNC5 MB8GCSqGSIb3DQEJARYSYWRtaW5AcHV0ZXZveTI0LnJ1MIIBIjANBgkq AQEFAAOCAQ8AMIIBCgKCAQEA1la78VCxc8g//rTUQjeKDTYqLlJn4nSX zvw9y0BjIPdbv5+MrZcOYWs/4xmeoIW2ivwmdb+JpBJdGN2MJufDsMlc TgKpDcGu7bxeQfFbcKf75kLkhMf7ords6S0pHdl2aykCO5oA2g2noqTK wv8orTh9CyBGwIx0t5TbzKVg9AQfVfgWUd0a/9+9GhXHgO84GHtgs3md tTzu7AtbdmjsLhfAT1jb9sGoIuQGQQS3ZXVIf06bVFWWmu62pUV/jAHn D/0+CQvkwapU/NUEiEnyqzOFOcJXL1nrgJeRq0X7eQIDAQABoAAwDQYJ hvcNAQEFBQADggEBACAqykpWOSmyUFkzHipduRmLzMgDcxZR/LHIwuq2 UV79oXP2Do73iGO/MmHAk49xvnP3X0ILQ+dYVPCCgvP6we6CWUit9yda cgvSCLEM/YFcMoaDFMO5wyMK6hA02WkHEwKBtaTFf2o4RTigIorkJ+Rl GzROrwePUYCcPIN+DJzWwgIuL7caNAWjweIG7S4oYf1LnpEV2s7C9pZW RnIUe9aXnLeSQHm83KEMajJxm4fJq6VZS30cGsgusMwgQUgeF5AEmu54 MnPKur2POD64DOPuNHMv+BGhn3CYNeOaH4CoGB0= -----END CERTIFICATE REQUEST-----
А на почту вам придёт закрытый ключ.
Использовать CSR для генерации сертификата
Для генерации сертификата на сайте, который выдаёт сертификаты,
нужно найти форму генерации сертификата, и в ней установить параметры:
1) Тип сервера: Other (так как Nginx как правило в списке отсутствует)
2) CSR: вставить скопированный ключ
3) Данные физического лица, на чьё имя записывается сертификат, такие как:
Имя, Фамилия, Организация, Должность, Электронная почта, Адрес, Дополнительный адрес,
Город, Область/Край, Почтовый индекс, Страна, Телефон.
После ввода этих данных, будет предложено выбрать метод валидации.
Самое простое — по адресу почту admin@mydomain.ru, на который должно прийти письмо со ссылкой на подтверждение.
После подтверждения на почту будет прислан сам сертификат в виде zip-архива, содержащий несколько файлов, упомянутых далее.
Подготовить сертификат для использования в Nginx
Для работы SSL серверу nginx нужно два файла — закрытый ключ (который пришел по почте, и он уже готов), и подготовленный сертификат.
Суть подготовки заключается в том, что нужно ваш личный сертификат (выданный для вашего mydomain.ru) объединить в один файл с сертификатами центра, выдавшего данный сертификат (Comodo).
Архив с сертификатом, который высылается вам на почту, содержит следующие файлы:
1. AddTrustExternalCARoot.crt — сертификат корневого центра сертификации
2. COMODORSAAddTrustCA.crt — сертификат самого Comodo
3. COMODORSADomainValidationSecureServerCA.crt — сертификат сервера Comodo, валидирующего домены
4. mydomain_ru.crt — сертификат вашего сайта
Нам необходимо объединить файлы 2,3,4 в один файл, что в консоли linux делается простой командой:
cat ./mydomain_ru.crt ./COMODORSADomainValidationSecureServerCA.crt ./COMODORSAAddTrustCA.crt > ./mydomain_ru.cert |
Также, вам на почту должен был прийти архив с CSR-файлом, а также файлом закрытого ключа. Об этом говорилось в самом начале данной заметки. В присланном архиве должно быть 2 файла — csr.txt и rsa.txt, могут они называться и несколько иначе, однако, факт в том, что приватный ключ — это НЕ CSR, а значит, в данном случае, он находится в файлу rsa.txt. Переименуем его для большей узнаваемости:
mv ./rsa.txt ./mydomain_ru.key |
Включить SSL в nginx с использованием сертификата
Пример конфигурации, на которой сайт заработает через SSL:
# Этот блок сервера для редиректов на https server { # Слушаем 80-й порт и перекидываем на https listen *:80; # Перенаправлять будем сайты с www и без www. server_name mydomain.ru www.mydomain.ru; # Собственно редирект return 301 https://$host/$1; } # Основной блок сервера server { #имя сервера server_name mydomain.ru www.mydomain.ru #Используем HTTPS(SSL) listen *:443; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Будем считать, что файлы mydomain_ru.cert и mydomain_ru.key мы положили в папку /etc/nginx/ssl/ ssl_certificate /etc/nginx/ssl/mydomain_ru.cert; ssl_certificate_key /etc/nginx/ssl/mydomain_ru.key; # Если разбираетесь в обычной настройке сервера nginx, то дальше можете не смотреть, пойдёт именно она. # логи access_log /mnt/data/logs/nginx/mydomain.ru-access.log; error_log /mnt/data/logs/nginx/mydomain.ru-error.log; # Индекс index index.php index.htm index.html; # Папка root /var/www/mydomain.ru; # Это настройка позволяющая открывать статический контент с помощью НЕ-GET запросов error_page 405 = $uri; # Закрываем доступ к файлам начинающимся с точки location ~ /\. { deny all; access_log off; log_not_found off; } # Включаем gzip-сжатие по всему серверу gzip on; gzip_comp_level 4; # Отключаем логи для favicon и robots.txt location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } #Основной location location / { try_files $uri $uri/ /index.php?$args; } # Передаём обработку PHP-скриптов PHP-FPM location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9999; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_ignore_client_abort off; fastcgi_param APPLICATION_ENV master; } } |
Подобный конфиг-файл можно положить в папку /etc/nginx/sites-available и сделать на этот файл симлинк в папке /etc/ngins/sites-enabled, после чего перезапустить Nginx.
Проверка сертификата
Для проверки можно зайти вот сюда: https://sslanalyzer.comodoca.com/, и, вбив имя своего домена, посмотреть, что видит там сторонний наблюдатель, причём во всех подробностях.
Обходились как-то раньше без всяких сертификатов, сейчас приходится бегать по всяким Хострадарам сломя голову, искать хостинг с дешёвым или бесплатным SSl.
Сейчас это уже не особо актуально. Есть бесплатные сертификаты от LetsEncrypt, которые даже автоматически продлеваются.