Есть множество центров сертификации, которые ищутся по запросу "купить ssl сертификат".
Существует три уровня сертификатов, которые отличаются скрупулезностью проверки запросившей сертификат организации и, соответственно, стоимостью (в несколько раз). При этом технически степень защиты на всех уровнях одинаковая.
Самый простой сертификат - уровня DV - стоит в пределах 1500 руб. на год. Такой сертификат обычно действует и на домен с www, помимо корневого. (Например, GlobalSign AlphaSSL на firstssl.ru - 1872 1250 руб., ноябрь 2025.)
Срок действия сертификата не включает день "до". Например, если срок - до 2023-01-13, то сертификат действителен до 12-го числа включительно. В других случаях (GlobalSign) он действует 13 месяцев и 1 день.
Процедура получения сертификата следующая:
-
Заводим учетную запись в центре сертификации.
-
Заполняем данные сайта. Домен указываем без www.
-
Получаем приватный ключ - текст вида
-----BEGIN PRIVATE RSA KEY----- .... Сохраняем его в файл (например,private.key). -
Заполняем контактные данные администратора сертификата. На указанный e-mail впоследствии пришлют файлы сертификата.
-
Выбираем способ проверки сертификата по хэш-файлу. Размещаем этот файл на сервере по адресу, указанному центром сертификации. Могут запросить дополнительную проверку через тег
<meta>в HTML-коде страниц или через TXT-запись в DNS (в таком случае нужен доступ к панели управления регистратора доменного имени; обновления DNS становятся доступными для проверки центром сертификации практически сразу, несмотря на заявленное время до нескольких часов). Также может потребоваться отключить редирект с www-домена. -
В течение 10-20 минут на почту администратора должны прийти файлы
.crtи.ca-bundle. Из них нужно сделать файл сертификата простым объединением:
cat file.crt file.ca-bundle > certificate.crt
(Источник: https://firstssl.ru/faq/ssl-installation/ustanovka-ssl-na-nginx)
Набор файлов сертификата может быть немного другим. Например, в сертификате от Global Signfile.crtиз примера - этоwww_sitename_ru.crt, а файлfile.ca-bundleполучается объединением файловAlphaSSL CA - SHA256 - G4.crtиGlobalSign Root CA.crt. То есть, для полученияcertificate.crtнужно просто объединить эти три файла в указанном порядке.
Для обновления уже выданного сертификата нужно купить у центра сертификации продление, заново пройти проверку домена (п.5), а затем сделать новый файл certificate.crt (часть п. 6) и дать команду sudo nginx -s reload. Файл private.key, выдаваемый центром сертификации, не меняется, за исключением, может быть, символов перевода строки - /n или /r/n, что на работе сертификата никак не сказывается.) При этом нужно использовать файл GlobalSign Root CA.crt из самого первого пакета. А файл GlobalSign.crt из последующих пакетов (без "Root"), напротив, оказывается не нужен.
Можно, например, сложить все новые файлы в какой-нибудь подкаталог рядом с private.key, затем дать команды:
cat www*.crt ../*Root*.crt *Alpha*.crt > ../certificate.crt
sudo nginx -s reloadНужно убедиться, что сертификат установлен успешно, просмотрев информацию о нём через браузер (например, в Firefox: Ctrl+I, вкладка "Защита" -> кнопка "Просмотреть сертификат"). Обратить внимание в первую очередь на срок действия сертификата.
Нужны права для редактирования и применения конфигурации nginx:
sudo vi /etc/nginx/sites-enabled/сайт
sudo nginx -s reloadНужно скопировать на сервер два файла - приватный ключ и сам сертификат.
В блок server конфигурации нужно добавить три директивы:
server {
listen 443 ssl;
ssl_certificate certificate.crt;
ssl_certificate_key private.key;
...
}(Есть и другие директивы, регулирующие работу SSL, но их указание необязательно.)
Пути к файлам нужно указывать в явном виде, без переменных.
Рекомендуется также включить работу по протоколу HTTP/2: listen 443 ssl http2.
Вот так выглядит полная конфигурация с поддержкой редиректов:
server {
server_name ~^(?<www>www\.)?(?<top_domain>сайт\.ru)$;
# http://nginx.org/en/docs/http/server_names.html#regex_names
listen 80;
listen 443 ssl http2;
ssl_certificate certificate.crt;
ssl_certificate_key private.key;
set $redirect 0;
if ($www) {
set $redirect 1;
}
if ($scheme = "http") {
set $redirect 1;
}
if ($redirect) {
return 301 https://$top_domain$request_uri;
}
# дальше пошла обычная конфигурация:
# root ...;
# ...
}В if nginx нет оператора OR. Также нельзя использовать переменные в путях к подключаемым файлам, поэтому конфигурация получается длиннее, чем можно было бы ожидать.
Для каждого конкретного случая нужно исправить:
- доменное имя в директиве
server_name - пути и имена файлов в директивах
ssl_certificateиssl_certificate_key
После применения конфигурации следует проверить правильность работы сайта. Браузеры кэшируют ответ, поэтому их использовать для этой цели не рекомендуется. Лучше использовать для этого команду curl:
curl -I -L -X GET https://www.сайт.ru-I(--headв длинной форме) - вывести только заголовки ответа-X GET- использовать метод запросаGET(при наличии-Iпо умолчанию используетсяHEAD)-L- проследовать по цепочке редиректов
curl -I -L -X GET http://www.vysokie.ru -s | grep -P "HTTP|Location" отфильтрует ответ,
оставив только значимые для редиректа строки (-s убирает индикатор выполнения, -P у
grep включает режим Perl-совместимых регулярных выражений, который требуется для работы альтернатив - |).