linux-labs

Вики / Сеть

TLS-сертификаты (openssl, Let's Encrypt)

Концепция OpenSSL 3 · certbot СетьБезопасностьВебHTTP

Проверка и выпуск сертификатов — openssl для диагностики, certbot для Let's Encrypt.

TLS-сертификат подтверждает подлинность сервера и шифрует трафик (HTTPS). Состоит из пары ключ + сертификат, подписанный центром (CA). Для публичных сайтов сертификаты бесплатно выдаёт Let's Encrypt (через certbot).

openssl — для диагностики и ручных операций.

# что за сертификат отдаёт сервер и до какого числа валиден
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -dates -subject -issuer

# посмотреть локальный файл сертификата
openssl x509 -in cert.pem -noout -text
openssl x509 -in cert.pem -noout -enddate     # дата истечения

# проверить, что ключ и сертификат — пара (modulus должны совпасть)
openssl x509 -in cert.pem -noout -modulus | openssl md5
openssl rsa  -in key.pem  -noout -modulus | openssl md5
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com   # выпустить + настроить nginx
sudo certbot renew --dry-run     # проверить автопродление
sudo certbot certificates        # список выданных сертификатов

Продление автоматическое (systemd-таймер certbot.timer). Сертификаты живут 90 дней; продлеваются за 30 до конца.

Сертификат истёк / NET::ERR_CERT_DATE_INVALID

Проверь дату: openssl ... -enddate. Продли (certbot renew); проверь, что таймер активен (systemctl status certbot.timer). Также проверь время на сервере (см. timedatectl) — «истёк» может быть из-за сбитых часов.

curl: SSL certificate problem

Неполная цепочка (нет промежуточных) или самоподписанный. Сервер должен отдавать fullchain. Проверь: openssl s_client -connect host:443 -showcerts.

certbot: challenge failed

Домен должен резолвиться на этот сервер и порт 80 быть доступен снаружи (HTTP-01). Проверь DNS и файрвол.

nginx не видит новый сертификат

После обновления — systemctl reload nginx (см. nginx).

# проверить сертификат сервера
openssl s_client -connect host:443 -servername host </dev/null 2>/dev/null | openssl x509 -noout -dates
sudo certbot --nginx -d domain    # выпустить для nginx
sudo certbot renew --dry-run      # проверить автопродление
openssl x509 -in cert.pem -noout -enddate   # когда истекает

См. также