Як налаштувати SSL використовуючи Certbot та Let - s Encrypt

certbot

Якщо ви вирішили налаштувати HTTPS на ваших серверах, то гадаю вам варто скористатися Certbot, т.к. це простий та швидкий спосіб отримання сертифікатів.

Let's Encrypt та Certbot

Let's Encrypt - цебезкоштовний таавтоматизований (за допомогою ACME протоколу) центр сертифікації, а Certbot - один із багатьох доступних клієнтів, який сильно спрощує життя.

Установка Certbot

Ми використовуємо CentOS 7 і на сайті Certbot вже є необхідні команди для встановлення:

У них також є інструкції для інших операційних систем.

Отримання SSL сертифіката

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

Плагін Nginx є експериментальним. Nginx Web Server - в даний час не працює

У нас є ряд віртуальних серверів і мені не хотілося все зіпсувати, тому я вирішив скористатися іншим плагіном, який також добре підходив - webroot.

Webroot плагін

Принцип роботи даного плагіна простий: вказуємо йому на головну/root папку веб-сервера, він створює там папку .well-known і кладе туди необхідні для перевірки файли, після чого клієнт з боку Let's Encrypt перевіряє їх і таким чином ми підтверджуємо права на вказаний домен . Більш детально описаний процес на сайті Let's Encrypt.

Однією з головних переваг є те, щонемає необхідності зупиняти веб-сервер. Ви також можете отримати сертифікат для багатьох доменів за один раз (так звані сертифікати SAN). Нижче наведу приклад необхідної для створення сертифікатів команди:

Тут ми маємо такі частини:

certonly - при використанніданої команди Certbot лише отримає сертифікати, але нічого робити з вашим веб сервером і встановлювати їх;

--webroot - вказуємо необхідний нам плагін;

-w - прапор для вказівки головної веб-директорії сервера. Просто вказуємо шлях;

-d – прапор для вказівки домену. Ви можете використовувати кілька таких прапорів після прапора -w за умови, що всі вони мають одну і ту ж головну веб папку.

Усі згенеровані ключі та сертифікати будуть знаходитись у /etc/letsencrypt/live/$domain . Якщо ви отримуєте сертифікат для безлічі доменів за раз, тоді на виході отримаєте лише одну папку на ім'я першого із зазначених доменів. У прикладі це буде /etc/letsencrypt/live/example.com .

Налаштування Nginx

Далі оновимо конфігурацію віртуального сервера:

Не забудьте перезавантажити Nginx:

Обмеження

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

Автоматизація продовження сертифікатів

Вирішувати проблему ми будемо за допомогою crontab, але спочатку раджу виконати наступну команду

під користувачем, під яким налаштовуватимете crontab, і переконатися, що все відпрацювало нормально. Це потрібно зробити т.к. Одна з потенційних проблем - права на папки, з якими працює певнийbot. Якщо проблем немає, то виконуємо crontab -e та налаштовуємо продовження сертифікатів:

Увага :замініть значення X від 0 до 59.

Certbot рекомендує запускати оновлення частіше ніж раз на 3 місяці. Завдання вище запускатиметься двічі на день. Щоб краще зрозумітиcrontab, скористайтеся Crontab Guru, який порадив @bfredit. Якщо ваші сертифікати будуть свіжими на момент запуску certbot, то він просто нічого не робитиме.

Повне налаштування зайняло близько 5 хвилин і було дуже приємним (думаю всі люблять коли все працює швидко і з першого разу), тому я рекомендую вам випробувати цей підхід.