На днях проскочила новость о том, что Let's Encrypt запускает выпуск сертификатов на IP адреса.
Сейчас многий софт без TLS и доверенного сертификата не хочет подключаться в принципе. Если выпускаешь самоподписанный сертификат, то надо настраивать доверие через передачу сертификата CA на целевую машину. Всё это создаёт неудобства, особенно в тестовой среде.
И вот теперь эта проблема решена. Можно взять виртуалку с внешним IP адресом и выпустить для него подтверждённый сертификат. Я сразу же решил проверить, как это работает.
Мне больше всего нравится certbot как клиент для взаимодействия с Let's Encrypt, хотя я пробовал и использовал все известные клиенты. К сожалению, у него пока не вышла стабильная версия с поддержкой этой новой функциональности. Проверял версию 4.0.0 из пакетов Debian 13, и самую свежую 5.2.2 из docker hub. Нет поддержки новых сертификатов. При запросе ошибка:
The Let's Encrypt certificate authority will not issue certificates for a bare IP address.
Сразу показываю рабочий вариант с использованием acme.sh. От установки, до выпуска сертификата:
# git clone https://github.com/acmesh-official/acme.sh.git
# cd ./acme.sh
# ./acme.sh --install -m zeroxzed@gmail.com
# ./acme.sh --issue -d 85.143.175.116 --standalone --server letsencrypt --certificate-profile shortlived
Получаем набор файлов для использования по назначению:
◽️ ~/.acme.sh/85.143.175.116_ecc/85.143.175.116.cer
◽️ ~/.acme.sh/85.143.175.116_ecc/85.143.175.116.key
◽️ ~/.acme.sh/85.143.175.116_ecc/fullchain.cer
Устанавливаем веб сервер, прописываем там в виде доменного имени IP адрес, подключаем этот сертификат. Пример для Angie/Nginx:
# mkdir -p /etc/nginx/tls
# ./acme.sh --install-cert -d 85.143.175.116 --key-file /etc/nginx/tls/85.143.175.116.key --fullchain-file /etc/nginx/tls/85.143.175.116.cer --reloadcmd "systemctl reload nginx"
Рисуем примерно такую конфигурацию для доступа по IP адресу:
server {
listen 80 default_server;
listen 443 ssl default_server;
ssl_certificate /etc/nginx/tls/85.143.175.116.cer;
ssl_certificate_key /etc/nginx/tls/85.143.175.116.key;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Заходим по HTTPS на IP адрес сервера и видим действительный сертификат. Никаких предупреждений.
Сертификат выдаётся менее чем на 7 дней, так что нужно внимательно следить за автоматическим обновлением. Описанных в заметке настроек достаточно для этого. Acme.sh добавил задание в cron пользователя, будет запускаться раз в сутки.
Удобная и функциональная возможность. Берите на вооружение. Не знаю, поддерживает ли получение таких сертификатов Angie напрямую, через свой встроенный клиент. Я не проверял. Если у кого-то есть информация, поделитесь.
#webserver #angie #nginx