Вступ
Let’s Encrypt — центр сертифікації, що надає безкоштовні криптографічні сертифікати X. 509 для TLS-шифрування (HTTPS) строком на 3 місці. В цій публікації ми будемо використовувати Certbot для отримання безкоштовного SSL/TLS сертифіката. Certbot — це безкоштовне програмне забезпечення з відкритим вихідним кодом для автоматичного використання сертифікатів Let’s Encrypt на веб-сайтах, керованих вручну, для активації HTTPS.
В даній публікації ми розглянемо, як створити окрему nginx конфігурацію та отримаєм SSL/TLS сертифікат.
Передумови
Перед початком Вам буде необхідно мати:
- Сервер Ubuntu 22.04 із встановленим nginx;
- Зареєстроване доменне ім’я. В даній публікації буде використовуватись умовне ім’я yoursite.com
- Також DNS записи типу A для yoursite.com та www.yoursite.com, що вказуватиме на публічну IP-адресу.
Встановлення Certbot
Першим кроком для отримання SSL/TLS сертифіката від Let’s Encrypt буде встановлення certbot на наш сервер, а це можна зробити за допомогою команди:
sudo apt install certbot python3-certbot-nginx -y
Налаштування nginx
Для того щоб виписати сертифікат за допомогою certbot, нам необхідно створити nginx конфігурацію в якій буде директива server_name
зі значенням яке відповідає нашому доменному імені.
Давайте створимо конфігурацію для нашого домену, а це можна буде зробити за допомогою команди:
sudo tee /etc/nginx/sites-available/yoursite.com <<EOF
upstream api {
server 127.0.0.1:9000;
}
server {
listen 80;
listen [::]:80;
root /var/www/yoursite.com/html;
index index.html index.htm index.nginx-debian.html;
server_name yoursite.com www.yoursite.com;
location / {
try_files \$uri /index.html;
}
location /api {
rewrite ^/api(/.*)$ \$1 break;
proxy_pass http://api;
}
}
EOF
Ну абож використайте будь який зручний для вас редактор, щоб створити файл /etc/nginx/sites-available/yoursite.com
вміст якого буде:
upstream api {
server 127.0.0.1:9000;
}
server {
listen 80;
listen [::]:80;
root /var/www/yoursite.com/html;
index index.html index.htm index.nginx-debian.html;
server_name yoursite.com www.yoursite.com;
location / {
try_files \$uri /index.html;
}
location /api {
rewrite ^/api(/.*)$ \$1 break;
proxy_pass http://api;
}
}
Дана конфігурація, як маленький приклад можливостей nginx. Тут використовуються різноманітні дериктиви як ось upstream, яка служить для того щоб об’єднати сервера в одну групу і балансувати запити між ними, так і proxy_pass
щоб передавати запити на наші сервера які описані в upstream
.
Отримання SSL/TLS сертифіката
Certbot надає різноманітні способи отримання сертифікатів SSL за допомогою плагінів. Плагін Nginx подбає про переналаштування Nginx і перезавантаження конфігурації, коли це необхідно. Щоб використовувати цей плагін, введіть наступне:
sudo certbot --nginx -d yoursite.com -d www.yoursite.com
Це виконується certbot
з --nginx
плагіном, використовуючи -d
для визначення доменних імен, для яких ми хочемо, щоб сертифікат був дійсним.
Якщо ви запускаєте вперше certbot
, вам буде запропоновано ввести адресу електронної пошти та погодитися з умовами обслуговування. Після цього certbot
він зв’яжеться з сервером Let’s Encrypt, а потім запустить виклик, щоб підтвердити, що ви контролюєте домен, для якого ви запитуєте сертифікат.
Якщо все буде успішно, то certbot
запитається, як ви хочете налаштувати параметри HTTPS.
Після того як certbot
завантажить та встановить сертифікати
ви зможете використовувати https:// у посиланню на ваш сервер. Також ви зможете протестувати ваш сертифікат із допомогою SSL Labs Server Test.
Перевірка автоматичного оновлення Certbot
Сертифікати Let’s Encrypt дійсні лише дев’яносто днів. Це має на меті спонукати користувачів автоматизувати процес поновлення сертифікатів. Пакет certbot
, який ми встановили, подбає про це за нас, додавши таймер systemd, який запускатиметься двічі на день і автоматично поновлюватиме будь-який сертифікат, термін дії якого закінчиться протягом тридцяти днів.
Ви можете запитати статус таймера за допомогою systemctl
:
sudo systemctl status certbot.timer
Щоб перевірити процес оновлення, ви ввести команду:
sudo certbot renew --dry-run
Якщо ви не бачите помилок, усе готово. За потреби Certbot оновить ваші сертифікати та перезавантажить Nginx, щоб отримати зміни. Якщо автоматичний процес поновлення не вдасться, Let’s Encrypt надішле повідомлення на вказану вами електронну пошту з попередженням про закінчення терміну дії вашого сертифіката.
Висновок
У цьому посібнику ви встановили клієнт Let’s Encrypt certbot
, завантажили сертифікати SSL для свого домену, налаштували Nginx на використання цих сертифікатів і налаштували автоматичне оновлення сертифіката.