June 21, 2025

Полное руководство: Настройка HTTPS с Let's Encrypt для домена и IP-адреса

В этой статье мы настроим бесплатные SSL-сертификаты от Let's Encrypt для домена (например, example.tech) и рассмотрим альтернативное решение для IP-адреса сервера. Этот метод обеспечит доверенное HTTPS-соединение


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

Требования:

  1. Сервер с Ubuntu (24.04/22.04)
  2. Установленный Nginx/Apache
  3. Доменное имя, привязанное к серверу (A-запись)
  4. Открытые порты 80 (HTTP) и 443 (HTTPS)

Проверка DNS-записи:

dig A example.tech +short

Ожидаемый результат:

192.0.2.1  # Ваш IP-адрес

2. Установка Certbot

Certbot — официальный клиент для работы с Let's Encrypt.

Для Nginx:

sudo apt update
sudo apt install -y certbot python3-certbot-nginx

Для Apache:

sudo apt install -y certbot python3-certbot-apache

3. Получение SSL-сертификата

3.1. Основная команда:

sudo certbot --nginx -d example.tech

или для Apache:

sudo certbot --apache -d example.tech

3.2. Процесс получения:

  1. Введите email для уведомлений
  2. Примите условия использования (Y)
  3. Выберите, хотите ли вы делиться email с EFF (опционально)
  4. Certbot автоматически настроит веб-сервер

4. Настройка Nginx

Пример ми конфигурации (/etc/nginx/sites-available/default):

server {
    listen 443 ssl;
    server_name example.tech;

    ssl_certificate /etc/letsencrypt/live/example.tech/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.tech/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
    
    root /var/www/example.tech;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name example.tech;
    return 301 https://$host$request_uri;
}

Примените изменения:

sudo nginx -t && sudo systemctl reload nginx

5. Автоматическое обновление

Let's Encrypt выпускает сертификаты на 90 дней. Certbot автоматически добавляет задание в cron:

Проверка автообновления:

sudo certbot renew --dry-run

Ручная настройка (если нужно):

sudo crontab -e

Добавьте строку:

0 0 */50 * * certbot renew --quiet --post-hook "systemctl reload nginx"

6. Решение для IP-адреса

Let's Encrypt не поддерживает сертификаты для IP. Альтернативы:

6.1. Самоподписанный сертификат

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/ip.key \
  -out /etc/ssl/certs/ip.crt \
  -subj "/CN=192.0.2.1"

6.2. Настройка Nginx для IP

server {
    listen 443 ssl;
    server_name 192.0.2.1;

    ssl_certificate /etc/ssl/certs/ip.crt;
    ssl_certificate_key /etc/ssl/private/ip.key;
    # ... остальные настройки ...
}

7. Проверка работы

  1. Откройте в браузере:
    • https://example.tech — должен показывать доверенный сертификат
    • https://192.0.2.1 — будет предупреждение (для IP)
  2. Проверка сертификата:
echo | openssl s_client -connect example.tech:443 2>/dev/null | openssl x509 -noout -dates

8. Плюсы и минусы Let's Encrypt

✅ Преимущества

  • Бесплатные доверенные сертификаты
  • Автоматическое обновление
  • Простая настройка
  • Поддержка wildcard-сертификатов

❌ Ограничения

  • Не работает с IP-адресами
  • Срок действия 90 дней (требует автообновления)
  • Лимиты на выпуск сертификатов

Заключение

Let's Encrypt — идеальное решение для быстрого и бесплатного перевода сайтов на HTTPS. Для IP-адресов придется использовать самоподписанные сертификаты или приобретать коммерческие решения. Настроив автоматическое обновление, вы получите постоянное защищенное соединение без лишних хлопот.