Как использовать бесплатные SSL/TLS-сертификаты Let’s Encrypt с NGINX

SSL/TLS-шифрование вашего веб-сайта приводит к более высокому поисковому рейтингу и лучшей безопасности при взаимодействии для ваших пользователей. 

Let’s Encrypt делает шифрование SSL/TLS бесплатным для всех. Сертификатам, выпущенным Let’s Encrypt, сегодня доверяют большинство браузеров, включая старые браузеры, такие как Internet Explorer в Windows XP SP3. Кроме того, Let’s Encrypt полностью автоматизирует как выдачу, так и продление сертификатов.

Сначала загрузите и установите в ОС клиент Let’s Encrypt, <strong>certbot</strong>.

$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python-certbot-nginx

В Ubuntu 18.04 и более поздних версиях замените версию Python 3:

$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx

<strong>certbot</strong> может автоматически настроить NGINX для SSL/TLS. Он ищет и изменяет <strong>server</strong> блок в вашей конфигурации NGINX, который содержит <strong>server_name</strong> директиву с доменным именем, для которого вы запрашиваете сертификат. В нашем примере это домен www.example.com .

Настройте NGINX

В конфигурационном файле NGINX укажите свое доменное имя (и варианты, если они есть) с помощью <strong>server_name</strong> директивы:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name example.com www.example.com;
}

Сохраните файл, затем запустите эту команду, чтобы проверить синтаксис вашей конфигурации и перезапустить NGINX:

nginx -t && nginx -s reload

Получите сертификат SSL/TLS

Выполните следующую команду, чтобы сгенерировать сертификаты с подключаемым модулем NGINX:

sudo certbot --nginx -d example.com -d www.example.com

<strong>certbot</strong> позаботится о перенастройке NGINX и перезагрузке его конфигурации при необходимости.

Далее ответьте на запросы от <strong>certbot</strong>, чтобы настроить HTTPS, для этого нужно указать ваш адрес электронной почты и принять условия обслуживания Let’s Encrypt.

Когда генерация сертификата завершится, NGINX перезагрузится с новыми настройками. А <strong>certbot</strong> выдаст в консоль сообщение об успешном создании сертификата и местоположении его (сертификата) на вашем сервере.

Congratulations! You have successfully enabled https://example.com and https://www.example.com 

-------------------------------------------------------------------------------------
IMPORTANT NOTES: 

Congratulations! Your certificate and chain have been saved at: 
/etc/letsencrypt/live/example.com/fullchain.pem 
Your key file has been saved at: 
/etc/letsencrypt/live/example.com//privkey.pem
Your cert will expire on 2017-12-12.

Примечание . Срок действия сертификатов Let’s Encrypt истекает через 90 дней (в примере — 12 декабря 2017 года). 

Если вы загляните в свой файл конфигурации ____.conf , то увидите, что <strong>certbot</strong> внес некоторые изменения:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name  example.com www.example.com;

    listen 443 ssl; # managed by Certbot

    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot

    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

Теперь ваш сайт должен открываться в защищенном соединении по схеме протокола HTTPS

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

Срок действия сертификатов Let’s Encrypt истекает через 90 дней. Я рекомендую вам автоматически обновлять сертификаты. Для этого добавим <strong>cron</strong>-задание в существующий файл crontab. Откройте файл:

crontab -e

Затем выберите как открыть, я выбрал редактор nano

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.tiny
  3. /usr/bin/code
  4. /bin/ed

Добавьте для <strong>certbot</strong> команду ежедневного выполнения. В этом примере мы запускаем скрипт каждый день в полдень. Команда проверяет, не истечет ли срок действия сертификата на сервере в ближайшие 30 дней, и обновляет его, если это так. Директива <strong>--quiet</strong> предписывает <strong>certbot</strong> не генерировать вывод .

0 12 * * * /usr/bin/certbot renew --quiet

Сохраните и закройте файл. Теперь все истекающие сертификаты будут автоматически продлены заблаговременно.