Немного о сервисе 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.
Автопродление сертификата
Откроем редактор планировщика cron выполнив команду:
crontab -e
Добавим строчку:
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
Данная команда будет выполнять обновление каждый понедельник в 2:30 ночи.
Обратите внимание что последняя строка должна быть пустой.