Рубрики
SOFTWARE

Let’s Encrypt & NGINX proxy

В данной заметке будет произведена первичная генерация сертификата с помощью сервиса Let’s Encrypt и настройка автоматического продления на примере моего сервера gitea.

Немного о сервисе Let’s Encrypt

Цитируя оффициальный сайт: Let’s Encrypt — это бесплатный, автоматизированный и открытый Центр Сертификации, созданный для вас некоммерческой организацией Internet Security Research Group (ISRG).
Данный сервис позволяет генерировать сертификаты для собственных сервисов.

Nginx proxy

Nginx в режиме прокси позволяет перенаправлять запросы на определенные ip и порт.
Вспоминая конфиг для gitea можно отметить, что обращение в адресе через косую черту обрабатывается в прокси на localhost:3000

server {
    listen 80;
    server_name git.rekovalev.site;
    
    location / {
        client_max_body_size 364M;
        proxy_pass http://localhost:3000;
        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 600;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Для генерации SSL сертификатов нам понадобится дать доступ к адресу «/.well-known/acme-challenge» на хостинге для подтверждения собственника домена (аутентификация). Для этого были созданы директории по адресу: «/var/www/gitea/.well-known/acme-challenge«.

Изходя из конфига представленного выше можно сделать вывод, что для подтверждения достаточно дописать доступ к файлам для директории в случае «location /.well-known/acme-challenge«:

    location /.well-known/acme-challenge {
        root /var/www/gitea;
    }

После этого необходимо перезагрузить nginx командой:

sudo systemctl restart nginx

Загрузка скрипта certbot для Let’s Encrypt

Перед установкой необходим Rust, который требуется для модуля cryptography. Пакет можно установить командой:

sudo apt-get install -y rustc

Установить скрипт можно пакетом через apt-get. Для этого необходимо выполнить команды:

sudo apt-get install certbot
pip install certbot

Генерация ключей SSL

Для генерации сертификата выполним команду:

sudo certbot certonly -d git.rekovalev.site

Где флаг -d задает домен на котором будет использоваться сертификат.
В процессе выполнения будет дана возможность выбора метода аутентификации:

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

После успешной генерации сертификатов будет получено сообщение:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/git.rekovalev.site/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/git.rekovalev.site/privkey.pem
   Your cert will expire on 2021-08-18. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

После этого можно изменить конфигурацию сайта nginx:

#переадресация на https
server {
    listen 80;
    server_name git.rekovalev.site;
    return 301 https://$server_name$request_uri;
}
#https
server {
    listen 443 ssl;
    server_name git.rekovalev.site;

    ssl_certificate /etc/letsencrypt/live/git.rekovalev.site/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.rekovalev.site/privkey.pem;

    location / {
        client_max_body_size 364M;
        proxy_pass http://localhost:3000;
        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 600;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /.well-known/acme-challenge {
        root /var/www/gitea;
    }
}

Выполним перезапуск nginx командой:

sudo systemctl restart nginx

Теперь наш домен использует сертификат. На рисунке 1 представлена строка адреса браузера Mozilla firefox.

Рисунок 1 — Браузер успешно распознал сертификат

Автопродление сертификата

Откроем редактор планировщика cron выполнив команду:

crontab -e

Добавим строчку:

30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

Данная команда будет выполнять обновление каждый понедельник в 2:30 ночи.

Обратите внимание что последняя строка должна быть пустой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.