Let’s Encrypt для шифрования соединения в Nginx

admin

Let’s Encrypt – бесплатный, открытый и автоматизированный центр сертификации, который уже выдал [https://letsencrypt.org/stats/ более 5 млн сертификатов]. Основные преимущества включают:

  • Бесплатность</strong>;
  • Автоматизация для настройки и обновления сертификата;
  • Защищенность – используются лучшие практики TLS;
  • Прозрачное использование – публичные записи о полученных и возобновленных сертификатах;
  • Открытый код для внедрения в большое количество сервисов и систем.

Let’s Encrypt предоставляет упрощенный способ получения сертификата для включения зашифрованного соединения с веб-сервером (веб-сайтом). Сервис как-раз и нужен, чтобы [p467 включить TLS]. Примечательно, что процесс получения и установки сертификата на Apache полностью автоматизирован, поэтому мы рассмотрим установку, настройку и использование Let’s Encrypt на Nginx и Ubuntu.

У Let’s Encrypt также есть свои минусы. Во-первых, сертификаты выдаются всего на 90 дней. Сертификаты на более длительный срок не предусмотрены. Во-вторых, сервис всего 2 месяца назад вышел из статуса беты в продакшн. В-третьих, для получения сертификатов используется множество зависимостей и плагинов. Само по себе это не страшно, но когда приходится обновлять сертификат каждые 3 месяца, неизбежно появятся проблемы. Кроме всего прочего, Let’s Encrypt все еще находится в активной разработке, так что баги и ошибки неизбежны.

Если “за” перевешивают все “против”, то можно приступать к установке и настройке.

Установка клиента

Для начала нужно выбрать клиент Let’s Encrypt. Основатели проекта рекомендуют использовать [https://certbot.eff.org/ Certbot], но вы можете взять любой из [https://letsencrypt.org/docs/client-options/ альтернативных клиентов].

Let’s Encrypt присутствует в пакетах ОС, так что для установки нужно выполнить:

$ sudo aptitude install letsencrypt
## В новых версиях в пакеты будет входить как certbot

Клиент доступен для различных ОС и веб-серверов, его также можно собрать из исходников:
wget https://dl.eff.org/certbot-auto

chmod a+x ./certbot-auto

./certbot-auto --help
## Используются существующие и дополнительные зависимости в виртуальной среде Python

Получение сертификата

Let’s Encrypt выдает сертификаты при помощи различных клиентов и методов. К сожалению, полноценный плагин для Nginx пока экспериментальный, поэтому не всегда работает корректно и приводит к сбоям веб-сервера. Если вы готовы к проблемам, то нужно собрать Certbot с исходников на [https://github.com/certbot/certbot GitHub], затем установить [https://github.com/certbot/certbot/tree/master/certbot-nginx плагин Nginx] и использовать его как опцию –nginx.

Но на данном этапе рекомендуется использовать плагин [https://certbot.eff.org/docs/using.html#webroot Webroot].

Использование плагина Webroot

Плагин удобен, если вы можете самостоятельно изменять файлы на сервере и для применения в продакшене. Он создает временные файлы для каждого домена:

${webroot-path}/.well-known/acme-challenge
## Не забудьте настроить сервер для раздачи файлов из скрытых директорий

А сервер валидации проверяет их в виде:

66.133.109.36 - - [05/Jan/2016:20:11:24 -0500] "GET /.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
## Проверяет, что DNS для запрашиваемого домена ведет на сервер с certbot

Желательно отредактировать файл настроек сайтов Nginx /etc/nginx/sites-available/default:

location ~ /.well-known {

allow all;

}
## Нужно добавить в блок server с включенным TLS

После этого можно получить сертификат:

$ letsencrypt certonly --webroot -w /var/www/somesite -d somesite.com -d www.somesite.com -w /var/www/other -d other.somesite.net
## Получение сертификатов и размещение их в директориях

Рассмотрим команду подробнее:

  • letsencrypt certonly –webroot – базовая команда для получения сертификата с использованием плагина webroot;
  • -w – указывает директорию верхнего уровня (web root);
  • -d – домены, для которых нужно получить сертификат.

Запустится процесс получения, нужно будет указать e-mail для восстановления, принять условия использования. Сообщение об успешном получении будет выглядеть так:

Output:

IMPORTANT NOTES:

- If you lose your account credentials, you can recover through

e-mails sent to **user@somesite.com**

- Congratulations! Your certificate and chain have been saved at

**/etc/letsencrypt/live/example.com/fullchain.pem**. Your

cert will expire on 2016-09-15. To obtain a new version of the

certificate in the future, simply run Let's Encrypt again.

- Your account credentials have been saved in your Let's Encrypt

configuration directory at /etc/letsencrypt. You should make a

secure backup of this folder now. This configuration directory will

also contain certificates and private keys obtained by Let's

Encrypt so making regular backups of this folder is ideal.

- If like Let's Encrypt, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate

Donating to EFF: https://eff.org/donate-le
## Кроме дополнительной информации, указывает путь к файлам сертификации

В директории /etc/letsencrypt/live/your_domain_name будут лежать такие файлы:

  • Cert.pem – сертификат домена;
  • Chain.pem – цепочка сертификата Let’s Encrypt;
  • Fullchain.pem – комбинация cert.pem и chain.pem;
  • Privkey.pem – личный ключ сертификата.

Включение TLS/SSL в Nginx

Теперь можно [p467 настраивать и оптимизировать TLS] в Nginx. И не забывайте делать [p177 301 редирект] с незащищенного http:// на защищенный https://.
Дополнительно можно сгенерировать группу по [https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%94%D0%B8%D1%84%D1%84%D0%B8_%E2%80%94_%D0%A5%D0%B5%D0%BB%D0%BB%D0%BC%D0%B0%D0%BD%D0%B0 протоколу Диффи-Хеллмана]:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
## Используется библиотека openssl и 2048-битное шифрование

Автоматическое обновление сертификата

Учтите, что сертификаты Let’s Encrypt выдаются только на 90 дней. Поэтому рекомендуем настроить автоматическое обновление сертификатов. Для этого нужно поместить команду в crontab или systemd:

sudo crontab -e

* * 30 * * letsencrypt renew >> /var/log/le-renew.log
## Автоматическая проверка и обновление сертификата каждые 30 дней

Самое главное

Обязательно включайте и оптимизируйте TLS на веб-сервере. А Let’s Encrypt поможет получать проверенные сертификаты быстро и бесплатно.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023