SSL-сертификат Comodo Positive SSL и Nginx
Запись о том, как сгенерировать и настроить самый простой 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/, и, вбив имя своего домена, посмотреть, что видит там сторонний наблюдатель, причём во всех подробностях.