Запасний варіант для Let's Encrypt - безкоштовні автоматичні засвідчуючі центри

25 листопада 2020
acme

Для багатьох Let's Encrypt став невід'ємною частиною веб-розробки, а автоматичне оновлення сертифікату кожні 90 днів - рутинною процедурою. Фактично, зараз це найпопулярніший засвідчуючий центр (далі по тексту ЗЦ), в інтернеті. Це прекрасно, але і небезпечно.

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

На щастя, запасні варіанти є. Як мінімум два. Такі ж безкоштовні автоматизовані ЗЦ, створені за зразком Let's Encrypt.

На нашому хостингу сайтів ми використовуємо сертифікати ЗЦ Let's Encrypt, який досить надійний. Але якщо щось піде не так, тепер ми знаємо що робити.

Протокол ACME

Усі комунікації з Let's Encrypt відбуваються про протоколу ACME (Automated Certificate Management Environment). Це відкритий протокол для автоматизації взаємодії з ЗЦ. У ньому немає нічого специфічного для Let's Encrypt, його підтримує декілька інших ЗЦ.

Зараз якраз той момент, коли все більше ЗЦ починають працювати через ACME. Це означає, що практично усі наші інструменти, скрипти і процеси для отримання сертифікатів з Let's Encrypt відмінно працюватимуть і з іншими центрами, які підтримують ACME.

Щоб переналаштуватись на інший ЗЦ, досить просто змінити адресу API в налагоджених скриптах з https://acme - v02.api.letsencrypt.org/directory (Let's Encrypt) на https://api.buypass.com/acme/directory (BuyPass, про нього див. нижче) або який-небудь інший.

BuyPass

Нам потрібний ЗЦ, який відповідає двом критеріям:

  • підтримує ACME;
  • видає безкоштовні сертифікати.

Цим критеріям відповідає норвезький ЗЦ під назвою BuyPass.

Безкоштовна послуга називається BuyPass Go SSL: це автоматична видача і продовження сертифікатів + підтримка ACME. Те, що і треба.

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

Реєстрація в ЗЦ і отримання сертифікату в BuyPass елементарні, як і у разі Let's Encrypt, тут ніякої різниці.

Реєстрація з вказанням своєї адреси електронної пошти для повідомлень ('YOUR _ EMAIL') і згодою на умови користування #01:

root@acme:~# certbot register - m 'YOUR _ EMAIL' --agree - tos --server 'https://api.buypass.com/acme/directory'

Отримання сертификату:

root@acme:~# certbot certonly --webroot - w /var/www/example.com/public html/ - d example.com - d www.example.com --server 'https://api.buypass.com/acme/directory'

Згодом при необхідності використовуються інші команди Certbot для відгуку сертифікату (revoke), продовження минулих сертифікатів (renew) та видалення сертифікату (delete).

Команду продовження рекомендується помістити в cron і виконувати автоматично, щоб про всяк випадок перевіряти минулі сертифікати. Наприклад, так:

#Cron - job scheduled under root to run every 12th hour at a specified minute (eg. 23, change this to your preference)23 */12 * * * /opt/certbot/certbot - auto renew - n - q >> /var/log/certbot - auto - renewal.log

У BuyPass є деякі ліміти на ACME. Основний ліміт - кількість сертифікатів на зареєстрований домен (20 в тиждень). Тут мається на увазі та частина домена, яка придбана у реєстратора доменних імен. Тобто це ліміт на усі піддомени в цілому. Інший ліміт - 5 дублікатів в тиждень. Це ліміт сертифікатів на кожен конкретний піддомен. Є ліміти на помилки валідації - по 5 штук на аккаунт, на хост і в годину.

Ліміт запитів до кінцевих точок new - reg, new - authz і new - cert: 20 в секунду. Ліміт запитів до /directory: 40 в секунду.

Максимальна кількість авторизацій в процесі (Pending Authorisations): 300 штук.

Замість Certbot можна використовувати інший клієнт acme.sh, який теж спочатку налагоджений на Let's Encrypt, але легко спрямовується на інший ЗЦ з підтримкою ACME.

./acme.sh --issue --dns dns _ cf - d example.com --server "https://api.buypass.com/acme/directory"

ZeroSSL

Ще один ЗЦ, який видає безкоштовні 90-денні сертифікати з протоколом ACME, - це австрійський ZeroSSL.

У вищезгаданій програмі acme.sh є підтримка ZeroSSL, так що зареєструватися дуже просто:

acme.sh --register - account - m foo@bar.com --server zerossl

Далі одна команда для генерації сертифікату:

acme.sh --issue --dns dns _ cf - d example.com --server zerossl

Лімітів на звернення до API не існує. Є і інші переваги: цей ЗЦ видає безкоштовні сертифікати не лише на 90 днів, але і на 1 рік, є панель веб-моніторингу та техпідтримка.

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

Інші сервери ACME

Ось список усіх відомих серверів ACME. Їх доки трохи, але число росте.

Let's Encrypt - видатна організація, яка робить відмінну справу. Але небезпечно класти усі яйця в одну корзину. Чим більше ЗЦ працює по протоколу ACME та роздає безкоштовні сертифікати в автоматичному режимі, тим різноманітніша і надійніша екосистема в цілому.

У Let's Encrypt може статися даунтайм або він може тимчасово призупинити діяльність - і тоді на підстраховування прийдуть Buypass і ZeroSSL. Наявність цих запасних варіантів зрештою підвищує довіру до самого Let's Encrypt, тому що це тепер не єдина точка відмови. А змінити ЗЦ по ACME - справа декількох секунд.

Джерело