Решил обновить статью по получению и продлению бесплатных SSL сертификатов для сайтов на выделенном сервере. Пишу больше для себя, поэтому если возникнут вопросы - пишите в комментариях. Пользоваться будем сервисом letsencrypt.org. На их сайте рекомендуется использовать клиента Certbot. В качестве web сервера у меня nginx, соответственно будем использовать его для подтверждения хоста при получении сертификата.
Получим сертификат для сайта my-site.com. Чтобы не останавливать web-сервер в процессе получения и обновления мы будем использовать плагин webroot, для этого подправим настройки хоста в nginx (откроем доступ по ссылке my-site.com/.well-known/acme-challenge и направим её на нужную папку):
Еще можете воспользоваться этим инструментом для генерации SSL конфига для вашего web сервера.
Установка клиента
Вы можете самостоятельно выбрать на сайте сертбота вашу операционку для добавления репозитория и дальнейшей установки через менеджер пакетов. Я буду использовать скрипт, он ставится на любую ОС, сам доустанавливает нужные пакеты и работает так же, как и любая другая версия.wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto
В первый раз при запуске скрипт установит все зависимости для работы.Получение SSL сертификата
В моем случае путь к скрипту: /root/certbot-autoПолучим сертификат для сайта my-site.com. Чтобы не останавливать web-сервер в процессе получения и обновления мы будем использовать плагин webroot, для этого подправим настройки хоста в nginx (откроем доступ по ссылке my-site.com/.well-known/acme-challenge и направим её на нужную папку):
nano /etc/nginx/sites-enabled/my-site.com.conf
В секции server {} описывающей ваш сайт добавляем локейшн для нашей webroot папки (в неё сертбот будет класть свои файлы и удалять после завершения запроса):# for certbot challenges
location ~ /.well-known/acme-challenge/ {
default_type "text/plain";
allow all;
root /var/www/html/;
}
Можете ниже сделать редирект для остального на https версию прописав соответствующие настройки для https хоста в той же или новой секции:location / {
return 301 https://$host$request_uri;
}
Далее создаем эту папку:mkdir -p /var/www/html/.well-known/acme-challenge/
И запускаем получение SSL сертификата:/root/certbot-auto certonly --webroot --webroot-path /var/www/html/ -d my-site.com
Если все прошло отлично, то в папке /etc/letsencrypt/live/my-site.com появятся 4 файла: cert.pem chain.pem fullchain.pem privkey.pem. На самом деле это симлинки на созданные файлы, при обновлении пути останутся теми же для всех новых сертификатов. Подключить в nginx их можно как-то так:ssl_certificate /etc/letsencrypt/live/my-site.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my-site.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_tickets off;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
Обратите внимание на параметр ssl_dhparam. Для него нам нужно будет еще сгенерировать файл /etc/nginx/dhparam.pem:openssl dhparam -out /etc/nginx/dhparam.pem 4096
Проверить правильность конечной настройки можно здесь, результаты должны быть A или A+.Еще можете воспользоваться этим инструментом для генерации SSL конфига для вашего web сервера.
Автоматическое продление
Пишем в /etc/crontab примерно так:08 30 * * * root /root/certbot-auto renew --webroot --webroot-path /var/www/html/ --cert-name my-site.com -q --post-hook "systemctl restart nginx.service"
Вместо systemctl restart nginx.service, можно использовать service nginx restart. Параметр -q отключает все сообщения. Можно добавить параметр --no-self-upgrade, чтобы запретить обновление скрипта при запуске (у меня обновления работают стабильно уже несколько лет). Скрипт будет выполняться каждый день в 8:30. Если до окончания сертификата осталось менее 30 дней, то сертификат будет обновлен автоматически.Получение wildcard SSL сертификата
Будем получать один сертификат для всех поддоменов *.my-site.com. Такой тип сертификатов называется wildcard. Для его получения нужно подтвердить запрос созданием DNS записи (плагин webroot не подойдет). Поэтому продление такого сертификата в автоматическом режиме будет сопряжено с некоторыми трудностями, нужно искать или писать плагины, которые по API смогут автоматически вносить записи на DNS сервер. У меня такой возможности нет, поэтому будем все делать вручную./root/certbot-auto certonly -d *.my-site.com --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --manual
В процессе получения мастер попросит добавить DNS запись TXT с именем _acme-challenge.my-site.com с указанным значением. После добавления записи ждем пару минут, нажимаем далее и получаем сертификат. Обновлять придется руками той же командой, либо с параметром renew вместо certonly, но в этом случае имя сертификата нужно будет задать параметром --cert-name, узнать имена сертификатов можно командой: /root/certbot-auto certificates.
Комментариев нет:
Отправить комментарий