Создание бесплатного SSL сертификата


Let’s Encrypt — центр сертификации запущенный компаниями Electronic Frontier Foundation, Mozilla Foundation, Akamai, Cisco Systems. Центр начал работу в бета-режиме с 3 декабря 2015 года и предоставляет бесплатные криптографические сертификаты X.509 для TLS шифрования (HTTPS). Сертификат можно получать как автоматически, так и в ручной режиме. Для получения сертификата на CentOS 7 необходимо установить репозиторий epel (Fedora).

yum install epel-release -y

Скачать установщик и дать права на его запуск

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

После этого запустить сам установщик. Он проверит систему и скачает недостающие пакеты.

./certbot-auto

В CentOS 7 certbot устанавливается через yum

yum install epel-release certbot -y

Далее приступаем к генерации сертификата

./certbot-auto certonly --webroot --agree-tos --email moya@pochta.ru -w /papka/moego/sayta -d moy-sayt.ru -d www.moy-sayt.ru

В CentOS 7 вместо команды ./certbot-auto используется certbot

Скрипт проверит вам ли принадлежит этот домен, для этого попросит освободить порт 80, в нашем случае данный порт занимает Nginx, поэтому его останавливаем.

service nginx stop

После проверки произойдёт генерация сертификата, который будет помещён в папку /etc/letsencrypt/live/moy-sayt.ru

Запускаем сервер Nginx

service nginx start

В новой версии certbot-auto и в Centos 7 Nginx останавливать и заново запускать не нужно, так как cerbot создаёт специальный проверочный файл к корневой директории сайта и совершая запрос на проверочный файл определяет домен вам принадлежит или нет.

Чтоб максимально сократить время, в течение которого сервер будет недоступен, используем следующую команду:

service nginx stop && ./certbot-auto certonly --webroot --agree-tos --email moya@pochta.ru -w /papka/moego/sayta -d moy-sayt.ru -d www.moy-sayt.ru && service nginx start

--webroot — с nginx используем этот ключ, означает корневую папку домена;
--agree-tos — автоматическое принятие лицензионного соглашения;
--email — адрес нашей почты. Пригодится для восстановления аккаунта;
-w — папка сайта;
-d — наш домен, можно указывать несколько, соответственно перед каждым доменом ставим -d.

Добавляем в конфигурационный файл нашего сайта в Nginx следующие строки:
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/moy-sayt.ru/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/moy-sayt.ru/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:-RC4+RSA:+HIGH:+MEDIUM:-EXP;
ssl_session_timeout 10m;
ssl_trusted_certificate /etc/letsencrypt/live/moy-sayt.ru/fullchain.pem;

А в /etc/nginx/nginx.conf следующие строки
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;

Таким образом стэплинг будет переведён на наш север.
Проверяем конфигурацию Nginx

nginx -t

Безопасный перезапуск сервера

nginx -s reload

Если с такой конфигурацией только андроид ругается на сертификат (у меня был такой случай), то необходимо настройки изменить.
ssl_certificate /etc/letsencrypt/live/moy-sayt.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/moy-sayt.ru/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:-RC4+RSA:+HIGH:+MEDIUM:-EXP;
ssl_session_timeout 10m;
ssl_trusted_certificate /etc/letsencrypt/live/moy-sayt.ru/chain.pem;

Срок генерации сертификата составляет 90 дней. Но можно через cron каждые 90 дней запускать команду для обновления сертификата и ключа шифрования. Всё делается полностью автоматически и nginx перенастраивать уже не нужно.

Предварительно проверяем работает ли автоматическое обновление.

./certbot-auto renew --dry-run

Если всё исправно работает, то мы будем запускать перегенерацию каждый месяц, так как через 2 месяца можно обновить сертификат, а из-за февраля, наш сертификат продлится только через 4 месяца (28+31=59, а сертификат продлится только на 60-ый дней и момент будет упущен и нужно будет ждать ещё 2 месяца для продления его). Для этого помещаем команду ./certbot-auto renew —quiet в файл /var/spool/cron/root

0 3 1 * * cd /путь-до-нашего-скрипта && ./certbot-auto renew --quiet --post-hook 'nginx -s reload'

Эта команда означает, что первого числа, каждого месяца в 0 минут 3 часа ночи будет запускаться скрипт, который будет обновлять сертификат и ключ шифрования, а после безопасно перегружать Nginx

Поделиться в: