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