JavaRush /Курси /Docker SELF /Керування сертифікатами та налаштування автоматичного оно...

Керування сертифікатами та налаштування автоматичного оновлення

Docker SELF
Рівень 7 , Лекція 4
Відкрита

1. Перевірка поточних сертифікатів

Команда certbot certificates

Почнемо з простого: як дізнатися, які сертифікати вже встановлені на твоєму сервері? Let's Encrypt надає зручний інструмент — certbot. За допомогою команди certbot certificates можна отримати детальну інформацію про поточні сертифікати.

sudo certbot certificates

У результаті ти побачиш щось на кшталт цього:

Found the following certs:
  Certificate Name: example.com
    Domains: example.com www.example.com
    Expiry Date: 2023-12-31 10:00:00+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem

Тут наведені важливі деталі:

  • Ім'я сертифіката.
  • Домени, охоплені сертифікатом.
  • Дата закінчення строку дії (щоб ти міг вчасно його оновити).
  • Шлях до файлів сертифіката та приватного ключа.

Корисний лайфхак:

Якщо ти маєш звичку ігнорувати сповіщення про строки дії, то ця команда стане твоїм найкращим другом. Адже ніхто не хоче бути тим програмістом, який дізнається про протермінований сертифікат від розлючених користувачів.


2. Автоматичне оновлення сертифікатів

Що під капотом у Let's Encrypt

Сертифікати Let's Encrypt діють 90 днів, щоб мінімізувати ризики безпеки. Але вручну оновлювати їх кожні 3 місяці — це зовсім не варіант. На щастя, для автоматизації використовується вбудована команда:

sudo certbot renew

Цей процес перевіряє всі сертифікати та автоматично оновлює ті, які вже близькі до закінчення терміну дії.

Налаштування автоматичного оновлення через Cron

Cron — це вбудований інструмент для планування задач у Linux. Він запускає команди за розкладом, і це саме те, що нам потрібно для автоматизації оновлення сертифікатів. Ось як налаштувати Cron для оновлення:

  1. Відкрий редактор Cron для поточного користувача:

    sudo crontab -e
    
  2. Додай наступний рядок у кінець файлу:

    0 0 * * * certbot renew --quiet
    

    Ця команда запускає certbot renew щодня опівночі. Прапор --quiet пригнічує зайвий вивід, тому оновлення відбуватиметься тихо і нікого не турбуватиме.

  3. Збережи зміни та вийди з редактора.

Тепер твій сервер буде автоматично оновлювати сертифікати, і можна не хвилюватися за закінчення терміну дії (ну або майже).


3. Ручне оновлення сертифікатів

Іноді автоматизація не вирішує всіх проблем, і доводиться оновлювати сертифікати вручну. Наприклад, якщо ви щойно додали новий домен у конфігурацію сайту, вам потрібно вручну запросити новий сертифікат. Знову на допомогу приходить certbot:

Приклад команди:

sudo certbot renew

Оновлення сертифіката для конкретного домену

Якщо вам потрібно оновити сертифікат, пов'язаний із певним доменом, використовується наступний формат запиту:

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

Тут:

  • --nginx вказує, що конфігурація буде автоматично застосована до сервера Nginx. Для Apache використовується --apache.
  • Флаги -d перелічують домени, для яких потрібен випуск сертифіката.

Після виконання команди Certbot перевірить конфігурацію сервера, запросить новий сертифікат і налаштує його.


4. Сповіщення і моніторинг

Email-сповіщення

Під час встановлення Certbot він запитав вашу email-адресу. Якщо ви її вказали, то будете отримувати сповіщення за 20 днів до закінчення сертифіката. Якщо ви раптом не вказали email чи хочете його змінити, це можна зробити так:

sudo certbot register --update-registration --email newaddress@example.com

Тепер жодна ситуація не застане вас зненацька. Ну, майже.

Перевірка ззовні

Існують сторонні сервіси, які можуть допомогти вам відстежувати термін дії сертифікатів. Наприклад, SSL Labs. Просто введіть адресу сайту, і сервіс перевірить його сертифікат, включаючи термін дії, ланцюжок довіри та рівень безпеки.


5. Видалення непотрібних сертифікатів

Іноді старі сертифікати стають неактуальними, наприклад, якщо ти перестав обслуговувати якийсь домен. Щоб не захаращувати систему, краще їх видалити.

Команда для видалення:

sudo certbot delete

Certbot покаже список доступних сертифікатів і запропонує обрати, який з них видалити.

Корисна порада:

Будь обережним при видаленні сертифікатів, щоб випадково не вимкнути робочий сайт. Завжди перевіряй, що сертифікат більше ніде не використовується.


6. Приклади та відлагодження помилок

Перевірка після оновлення

Після будь-яких змін або оновлень сертифікатів завжди перевіряйте, що сайт працює коректно. Найпростіше це зробити за допомогою curl:

curl -I https://example.com

Очікуваний результат — код HTTP/1.1 200 OK.

Якщо щось пішло не так, в першу чергу дивіться логи:

  • Для Nginx:

      sudo tail -f /var/log/nginx/error.log
    
  • Для Apache:

      sudo tail -f /var/log/apache2/error.log
    

Часта помилка: "Too Many Requests"

Якщо ви занадто часто запитуєте нові сертифікати, Let's Encrypt може заблокувати вам доступ з помилкою "Too Many Requests". У таких випадках рекомендується використовувати тестовий сервер Let's Encrypt:

sudo certbot certonly --test-cert --nginx -d example.com

Ця команда видає тестовий сертифікат, який не дійсний для реального використання, але допоможе перевірити конфігурацію.


7. Завершальний крок: автоматичний перезапуск веб-сервера

Let's Encrypt оновлює файли сертифікатів, але веб-сервери, такі як Nginx або Apache, не помічають змін, поки їх не перезапустиш. Це також можна автоматизувати. Онови Cron-запис:

0 0 * * * certbot renew --quiet && systemctl reload nginx

Або для Apache:

0 0 * * * certbot renew --quiet && systemctl reload apache2

Тепер після оновлення будь-який сертифікат буде одразу ж застосований до сервера.


Ця лекція націлена на те, щоб ти міг/могла спокійно спати вночі, знаючи, що твої сертифікати оновлюються автоматично, сайти захищені, а ти не отримаєш дзвінок від боса о третій годині ночі зі словами "Користувачі скаржаться, що сайт недоступний". Керування сертифікатами — це важливий навик, який стане у нагоді в реальній роботі, особливо якщо ти плануєш займатися розгортанням великих веб-додатків або DevOps-інженерією.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ