Перейти к основному содержимому
Вернуться в категорию

Установка SSL/TLS сертификата: Руководство Let's Encrypt

Установка бесплатного SSL/TLS сертификата с Let's Encrypt и Certbot для Nginx и Apache. Автоматическое обновление, настройка HTTPS и устранение распространённых ошибок.

Время чтения: 12 мин Управление сервером
ssltlslets encryptcertbothttpsсертификатnginxapache

Содержание

Установка SSL/TLS сертификата: Руководство Let's Encrypt

SSL/TLS сертификаты шифруют соединение между вашим веб-сервером и посетителями. HTTPS сегодня необходим для SEO-рейтинга, доверия браузеров и безопасности пользователей. Let's Encrypt предоставляет бесплатные, автоматизированные и открытые сертификаты.

Что такое SSL/TLS?

SSL (Secure Sockets Layer) и его современный преемник TLS (Transport Layer Security) — криптографические протоколы для защиты данных в сети. При использовании HTTPS:

  • Данные шифруются при передаче (конфиденциальность)
  • Идентификация сервера проверяется (аутентификация)
  • Данные не могут быть изменены (целостность)

Современные браузеры помечают HTTP-сайты как «Небезопасные». Google использует HTTPS как фактор ранжирования. На серверах REXE установка SSL бесплатна и проста.

Установка Certbot

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

Debian/Ubuntu

hljs bash
# Обновление системы
sudo apt update && sudo apt upgrade -y

# Установка Certbot с плагином Nginx
sudo apt install certbot python3-certbot-nginx -y

# Для Apache
sudo apt install certbot python3-certbot-apache -y

RHEL/CentOS/AlmaLinux

hljs bash
# Добавление репозитория EPEL
sudo dnf install epel-release -y

# Установка Certbot
sudo dnf install certbot python3-certbot-nginx -y

Установка через Snap (Рекомендуется)

hljs bash
# Установка snapd
sudo apt install snapd -y

# Установка Certbot через snap
sudo snap install --classic certbot

# Создание символической ссылки
sudo ln -s /snap/bin/certbot /usr/bin/certbot

# Проверка версии
certbot --version

Получение SSL сертификата для Nginx

Предварительные требования

Перед получением сертификата:

  1. Ваш домен должен указывать на IP-адрес сервера
  2. Порты 80 и 443 должны быть открыты
  3. Nginx должен работать
hljs bash
# Проверка разрешения домена
nslookup example.com

# Проверка состояния брандмауэра
sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Автоматическая настройка Nginx

hljs bash
# Получить сертификат и автоматически настроить Nginx
sudo certbot --nginx -d example.com -d www.example.com

# Только получить сертификат (ручная настройка)
sudo certbot certonly --nginx -d example.com -d www.example.com

# Wildcard сертификат (требует DNS-проверку)
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com

Ручная настройка SSL в Nginx

hljs nginx
# Перенаправление HTTP на HTTPS
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

# Блок HTTPS сервера
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

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

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;

    add_header Strict-Transport-Security "max-age=15768000" always;

    root /var/www/example.com/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
hljs bash
# Проверка конфигурации
sudo nginx -t

# Перезагрузка Nginx
sudo systemctl reload nginx

Получение SSL сертификата для Apache

hljs bash
# Включение модуля SSL
sudo a2enmod ssl
sudo a2enmod rewrite

# Получение сертификата с плагином Apache
sudo certbot --apache -d example.com -d www.example.com

Ручная настройка SSL в Apache

hljs apache
<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

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

Сертификаты Let's Encrypt действительны 90 дней. Certbot настраивает systemd timer или cron job для автоматического обновления.

hljs bash
# Тест автоматического обновления
sudo certbot renew --dry-run

# Проверка статуса таймера
sudo systemctl status certbot.timer

# Ручное обновление
sudo certbot renew

# Перезагрузка Nginx после обновления
sudo certbot renew --post-hook "systemctl reload nginx"

Обновление через Cron

hljs bash
# Редактирование crontab
sudo crontab -e

# Проверка дважды в день
0 0,12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

Проверка статуса сертификата

hljs bash
# Список всех сертификатов
sudo certbot certificates

# Проверка даты истечения
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

Устранение неполадок

Порт 80 заблокирован

hljs bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo systemctl status nginx

Ошибка разрешения домена

hljs bash
nslookup example.com 8.8.8.8
dig example.com +short
curl -4 ifconfig.me

Let's Encrypt применяет ограничения: 5 неудачных попыток в час. Используйте флаг --staging для тестирования.

hljs bash
# Тестовая среда (без ограничений)
sudo certbot --nginx --staging -d example.com

Заключение

С Let's Encrypt и Certbot установка SSL/TLS сертификата занимает всего несколько минут. Автоматическое обновление устраняет беспокойство об истечении срока действия. Использование HTTPS на серверах REXE критически важно как для безопасности, так и для SEO.