Logo Craft Homelab Docs Контакты Telegram
TLS-сертификат для IPv4-адреса: HTTPS без домена Трендовые github проекты в нашем телеграм канале. Подпишись →
16 августа 2026 г.

Защищённый веб-сервис на публичном IP-адресе

Публичный IPv4 часто используют для временного стенда, внутреннего API, устройства в сети или небольшого сервиса на VPS. Раньше HTTPS для такого узла обычно требовал доменного имени либо установки самоподписанного сертификата на каждом клиенте. Профиль shortlived в Let’s Encrypt позволяет выпустить доверенный сертификат для IP-адреса и сохранить привычную модель проверки в браузерах и клиентах.

У такого сертификата короткий срок действия — шесть дней. Поэтому конфигурацию следует строить вокруг автоматического продления и контролируемого перезапуска веб-сервера. Ниже — последовательность для Ubuntu и Lighttpd, которую удобно адаптировать под собственный сервис.

Когда сертификат на IP полезен

Сертификат подтверждает, что клиент подключился к нужному серверу, и участвует в TLS-рукопожатии. После согласования параметров стороны используют симметричный ключ сессии для шифрования HTTP-трафика. Доверенный центр сертификации подписывает сертификат, а клиент сверяет цепочку с корневыми центрами из своего хранилища.

Самоподписанный сертификат подходит для закрытой сети, локальной разработки и личной админки. Браузер без дополнительной настройки покажет предупреждение о неизвестном центре сертификации: цепочка доверия для такого сертификата отсутствует. Сертификат Let’s Encrypt устраняет это ограничение для публичного IPv4, если сервис проходит проверку владения адресом.

Практические сценарии:

  • короткоживущий стенд, доступный по одному IP;
  • служебный HTTP-интерфейс VPS;
  • API или устройство, для которого домен не нужен;
  • быстрый защищённый сервис с прямым обращением по адресу.

Для пользовательского сайта с устойчивым адресом доменное имя по-прежнему удобнее: его проще запомнить, перенести между серверами и использовать в ссылках.

Подготовка сервера

Начните с обновления пакетов и проверки времени. Центр сертификации учитывает период действия сертификата, поэтому заметное расхождение системных часов способно сорвать ACME-проверку.

sudo apt update && sudo apt upgrade
sudo timedatectl set-timezone Europe/Moscow
date

До включения файрвола определите способ доступа к серверу. В примере SSH перенесён на порт 2222; сначала разрешите его в UFW, поменяйте Port в /etc/ssh/sshd_config, перезапустите SSH и проверьте новое подключение в отдельном терминале. Только после успешной проверки закрывайте порт 22.

sudo ufw allow 2222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

Порт 80 нужен для первичной проверки и HTTP-редиректа, а 443 принимает TLS-трафик. Доступ по SSH лучше ограничить ключами; смена порта дополнительно сокращает поток случайных попыток подключения.

Если сервис не должен попадать в поисковую выдачу, положите в каталог сайта файл /var/www/html/robots.txt:

User-agent: *
Disallow: /

Этот файл сообщает правило корректным поисковым роботам. Он не заменяет сетевые ограничения и аутентификацию для закрытого интерфейса.

Выпуск short-lived сертификата

Установите Lighttpd и Certbot. Каталог webroot должен быть доступен по HTTP на публичном IP: Certbot разместит в нём данные для проверки.

sudo apt install lighttpd -y
sudo snap install --classic certbot

Разместите тестовую страницу в /var/www/html/, затем запустите выпуск. Вместо IP-ВАШЕГО-VPS подставьте настоящий публичный IPv4-адрес сервера.

sudo certbot certonly \
  --preferred-profile shortlived \
  --ip-address IP-ВАШЕГО-VPS \
  --webroot \
  --webroot-path /var/www/html/

После успешной проверки файлы сертификата появятся в каталоге /etc/letsencrypt/live/IP-ВАШЕГО-VPS/. Укажите действующий почтовый адрес при выпуске: уведомления помогут вовремя заметить проблемы с продлением.

Настройка Lighttpd для HTTPS

Подключите модуль OpenSSL в секции server.modules файла /etc/lighttpd/lighttpd.conf:

server.modules = (
  "mod_indexfile",
  "mod_access",
  "mod_alias",
  "mod_redirect",
  "mod_openssl",
)

Добавьте TLS-сокет и пути к выпущенным ключам. Минимальная версия TLS в этой конфигурации — 1.2.

$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  ssl.pemfile = "/etc/letsencrypt/live/IP-ВАШЕГО-VPS/fullchain.pem"
  ssl.privkey = "/etc/letsencrypt/live/IP-ВАШЕГО-VPS/privkey.pem"
  ssl.openssl.ssl-conf-cmd = ("MinProtocol" => "TLSv1.2")
}

Проверьте синтаксис до перезапуска. Ошибка в конфигурации способна оставить сервис недоступным после применения изменений.

sudo lighttpd -tt -f /etc/lighttpd/lighttpd.conf
sudo systemctl restart lighttpd

Редирект HTTP и наблюдение

Современные браузеры часто пробуют HTTPS сразу, однако скрипты, старые клиенты и явно заданный URL с http:// обратятся к порту 80. Перенаправление сохраняет путь запроса и отправляет клиента на тот же IP по HTTPS.

$SERVER["socket"] == ":80" {
  $HTTP["host"] =~ "([0-9.]+)" {
    url.redirect = ( "^/(.*)" => "https://%1/$1" )
  }
}

Снова выполните проверку конфигурации и перезапустите Lighttpd. Для просмотра обращений включите модуль журнала доступа:

sudo /usr/sbin/lighty-enable-mod accesslog
sudo systemctl restart lighttpd
tail -f /var/log/lighttpd/access.log

Журнал удобен для проверки редиректа, ACME-проверок и неожиданных запросов к сервису. Для постоянной эксплуатации добавьте ротацию логов и отслеживание ошибок веб-сервера.

Продление каждые несколько часов

Шестидневный срок сертификата требует автоматического обновления. Запустите certbot renew с регулярной периодичностью и перезапускайте Lighttpd только после фактического продления:

sudo crontab -e
0 */3 * * * certbot renew --quiet --deploy-hook "systemctl restart lighttpd"

Задача стартует раз в три часа. Certbot самостоятельно определяет, нужен ли выпуск нового сертификата; --deploy-hook перезапускает веб-сервер после обновления файлов. Периодически проверяйте выполнение cron-задачи и дату окончания сертификата, особенно после обновления Certbot, изменения файрвола или миграции VPS.

TLS для публичного IP делает защищённое подключение доступным для сервисов с прямым адресом. Надёжность этой схемы обеспечивают открытые порты для проверки, корректное время, рабочий webroot и автоматическое продление.