Едва ли има нужда да описваме приноса и значението на Let’s Encrypt за света на Интернет. Но накратко, това е сертифициращ орган (англ. Certificate Authority, CA), който издава безплатно SSL сертификати, за да можете да активирате HTTPS за вашите уеб-страници. За да стане това възможно, вие трябва да докажете, че контролирате домейна, за който искате SSL сертификат. И това става с помощта на софтуер, който използва протокола ACME, и който се стартира на уеб-хоста.
Най-разпространеният ACME клиент, с който се работи лесно и бързо, се нарича Cerbot. Този инструмент се предлага за всички разпространени операционни системи (Linux, Mac OS и Windows) и напълно автоматизира процеса на издаване, инсталиране и подновяване на SSL сертификати без да се налага да прекъсвате работата на вашите сайтове.
Нашият кратък материал обаче е за един друг инструмент, който се стартира от команден ред (използва bash обвивка и работи на повечето Linux дистрибуции, Mac OS, BSD и UNIX системи), и изисква малко повече познания и настройки за първоначална инсталация. Неговото име е getssl (Как по друг начин може да се казва инструмент, който прави точно това?) и той е подходящ за отдалечени системи за автоматизиране на процеса на получаване на сертификати от ACME сървъра letsencrypt.org.
Тук няма да се спираме на инсталацията и настройката на getssl, което можем да направим в отделен материал (за момента вижте сайта на инструмента), а ще опишем един проблем, с който се сблъскахме през ноември. Обикновено след първоначалната настройка getssl автоматично обновяван сертификатите на домейните на уеб-сървъра, и това става с прост cron скрипт, който се изпълнява ежедневно (например в 6:20 сутринта).
20 6 * * * /root/scripts/getssl -u -a -q
Скриптът обновява и самата програма – при наличие на нова версия тя се изтегля локално на сървъра (в конкретния пример в /root/scripts) и след това се изпълнява. В средата на месеца получихме имейл съобщение от автоматичния бот на Let’s Encrypt, че валидността на сертификата на един от нашите сайтове изтича и той трябва да се обнови. Това беше странно, тъй като следвайки препоръките, бяхме настроили обновяването да се извършва месечно (т.е. доста преди да изтече максималният срок от три месеца на сертификата). Веднага прегледахме инсталацията за евентуални проблеми и тогава открихме, че getssl файлът на програмата е с почти нулев размер и съдържа съобщението 400:Invalid request
. Веднага посетихме сайта на getssl и там видяхме съобщението, че автоматичното обновяване на версия 2.43 е „счупено“, заради неправилен URL адрес, и обновяването трябва да се извърши ръчно със следната команда:
curl --silent --user-agent getssl/manual https://raw.githubusercontent.com/srvrco/getssl/latest/getssl --output getssl
Веднага изпълнихме препоръката, командата изтегли коригираната версия на getssl – v2.45 и ние успяхме да обновим проблемния сертификат (опцията f е за форсиране на обновяването на сертификата без да се проверява неговата валидност) без повече проблеми:
getssl -f vashdomein.bg
И така, благодарение на предупреждението от Let’s Encrypt ние успяхме да се справим с обновяването на SSL сертификата без прекъсване на работата на съответния сайт. Ако го бяхме пренебрегнали, щяхме да разберем за проблема след изтичането на срока на валидност на сертификата и обажданията на недоволни клиенти, които не могат да отворят сайта, получавайки предупреждение от браузъра за невалиден сертификат.