- Home »

Введение в Let’s Encrypt: бесплатные SSL-сертификаты
Помнишь времена, когда SSL-сертификаты стоили от 50 до 500 долларов в год? Я помню, как в 2014 году приходилось объяснять клиентам, почему их сайт-визитка должен работать через HTTP, а не HTTPS. Всё изменилось с появлением Let’s Encrypt — некоммерческого центра сертификации, который дарит SSL-сертификаты бесплатно. Сегодня разберём, как это работает изнутри, настроим автоматическое получение и обновление сертификатов, а также поделимся практическими кейсами и подводными камнями.
Что такое Let’s Encrypt и почему это революция
Let’s Encrypt — это автоматизированный центр сертификации (CA), запущенный в 2016 году Internet Security Research Group (ISRG). Основная цель проекта — сделать шифрование повсеместным и бесплатным. За 7 лет работы они выдали более 3 миллиардов сертификатов и покрывают около 90% всех HTTPS-сайтов.
Ключевые принципы Let’s Encrypt:
- Бесплатность — никаких скрытых платежей или премиум-функций
- Автоматизация — полный жизненный цикл сертификата управляется через API
- Безопасность — используются современные стандарты и практики
- Прозрачность — все выданные сертификаты логируются публично
- Открытость — протокол ACME является открытым стандартом
Как работает протокол ACME
Automatic Certificate Management Environment (ACME) — это протокол, который позволяет автоматически получать, устанавливать и обновлять SSL-сертификаты. Процесс выглядит следующим образом:
- Запрос сертификата — клиент отправляет запрос на получение сертификата для домена
- Валидация домена — Let’s Encrypt проверяет, что вы действительно контролируете домен
- Выдача сертификата — после успешной валидации выдается сертификат
- Автообновление — за 30 дней до истечения сертификат обновляется автоматически
Существует несколько способов валидации:
- HTTP-01 — размещение файла на веб-сервере по определенному пути
- DNS-01 — создание TXT-записи в DNS
- TLS-ALPN-01 — валидация через TLS-расширение
Установка и настройка Certbot
Certbot — это официальный клиент Let’s Encrypt от Electronic Frontier Foundation. Он поддерживает большинство популярных веб-серверов и операционных систем.
Установка на Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx
# или для Apache
sudo apt install certbot python3-certbot-apache
Установка на CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx
# или
sudo dnf install certbot python3-certbot-nginx
Получение первого сертификата
# Для Nginx (автоматическая настройка)
sudo certbot --nginx -d example.com -d www.example.com
# Для Apache
sudo certbot --apache -d example.com -d www.example.com
# Только получение сертификата без настройки веб-сервера
sudo certbot certonly --webroot -w /var/www/html -d example.com
# Получение wildcard-сертификата (требует DNS-валидацию)
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com"
Практические кейсы и примеры
Кейс 1: Простой сайт на Nginx
Самый распространенный сценарий — получение сертификата для обычного сайта:
# Базовая конфигурация Nginx
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html;
}
# Получение сертификата
sudo certbot --nginx -d example.com -d www.example.com
# Результат: Certbot автоматически добавит SSL-конфигурацию
Кейс 2: Множественные поддомены
Для проектов с большим количеством поддоменов удобно использовать wildcard-сертификаты:
# Создаем DNS TXT-запись для валидации
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com
# Certbot покажет, какую TXT-запись нужно создать
# Например: _acme-challenge.example.com. 300 IN TXT "abc123def456"
Кейс 3: Автоматизация с помощью DNS API
Для автоматизации wildcard-сертификатов можно использовать DNS-плагины:
# Установка плагина для Cloudflare
sudo apt install python3-certbot-dns-cloudflare
# Создание файла с API-ключом
echo "dns_cloudflare_api_token = your_api_token_here" > ~/.secrets/certbot/cloudflare.ini
chmod 600 ~/.secrets/certbot/cloudflare.ini
# Получение сертификата
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d "*.example.com"
Автоматическое обновление сертификатов
Сертификаты Let’s Encrypt действительны 90 дней, поэтому критически важно настроить автоматическое обновление:
# Проверка автообновления
sudo certbot renew --dry-run
# Добавление в cron (запуск дважды в день)
echo "0 12 * * * /usr/bin/certbot renew --quiet" | sudo crontab -
# Или использование systemd timer (более современный подход)
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
Скрипт для уведомлений об обновлении
#!/bin/bash
# /usr/local/bin/certbot-renew-notify.sh
LOG_FILE="/var/log/certbot-renew.log"
EMAIL="admin@example.com"
/usr/bin/certbot renew --quiet >> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
echo "$(date): Certificates renewed successfully" >> $LOG_FILE
systemctl reload nginx
else
echo "$(date): Certificate renewal failed" >> $LOG_FILE
mail -s "Certificate renewal failed" $EMAIL < $LOG_FILE
fi
Сравнение с другими решениями
Критерий | Let's Encrypt | Платные CA | Self-signed |
---|---|---|---|
Стоимость | Бесплатно | $10-500/год | Бесплатно |
Валидация | DV только | DV, OV, EV | Нет |
Автоматизация | Полная | Частичная | Полная |
Доверие браузеров | Полное | Полное | Предупреждения |
Срок действия | 90 дней | 1-3 года | Любой |
Wildcard | Да (DNS-валидация) | Да | Да |
Альтернативные ACME-клиенты
Помимо Certbot существуют и другие клиенты:
- acme.sh — легковесный bash-скрипт, поддерживает множество DNS-провайдеров
- Caddy — веб-сервер со встроенной поддержкой Let's Encrypt
- Traefik — reverse proxy с автоматическим получением сертификатов
- Lego — ACME-клиент написанный на Go
Пример использования acme.sh
# Установка
curl https://get.acme.sh | sh
# Получение сертификата
acme.sh --issue -d example.com -w /var/www/html
# Установка сертификата для Nginx
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--reloadcmd "systemctl reload nginx"
Подводные камни и решения
Лимиты Let's Encrypt
Важно знать о существующих ограничениях:
- 20 сертификатов на домен в неделю
- 100 доменов в одном сертификате
- 5 дублирующих сертификатов в неделю
- 10 неуспешных валидаций в час
Проблемы и их решения
# Проблема: домен недоступен для HTTP-валидации
# Решение: используйте DNS-валидацию
certbot certonly --manual --preferred-challenges dns -d example.com
# Проблема: файрвол блокирует порт 80
# Решение: временно откройте порт или используйте standalone режим
sudo ufw allow 80/tcp
certbot certonly --standalone -d example.com
# Проблема: сертификат не обновляется автоматически
# Решение: проверьте права доступа и логи
sudo certbot renew --dry-run
sudo tail -f /var/log/letsencrypt/letsencrypt.log
Интеграция с Docker и Kubernetes
Для современных контейнеризированных приложений существуют специальные решения:
Docker Compose с Nginx и Certbot
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- certbot-certs:/etc/letsencrypt
- certbot-www:/var/www/certbot
certbot:
image: certbot/certbot
volumes:
- certbot-certs:/etc/letsencrypt
- certbot-www:/var/www/certbot
command: certonly --webroot --webroot-path=/var/www/certbot --email admin@example.com --agree-tos --no-eff-email -d example.com
volumes:
certbot-certs:
certbot-www:
Kubernetes с cert-manager
# Установка cert-manager
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.11.0/cert-manager.yaml
# ClusterIssuer для Let's Encrypt
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
Мониторинг и алертинг
Для production-окружения важно отслеживать состояние сертификатов:
#!/bin/bash
# Скрипт проверки срока действия сертификатов
check_cert_expiry() {
local domain=$1
local days=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2 | xargs -I {} date -d "{}" +%s)
local now=$(date +%s)
local diff=$(( ($days - $now) / 86400 ))
if [ $diff -lt 30 ]; then
echo "WARNING: Certificate for $domain expires in $diff days"
fi
}
# Проверка всех доменов
for domain in example.com api.example.com; do
check_cert_expiry $domain
done
Интересные факты и статистика
Несколько любопытных фактов о Let's Encrypt:
- В 2023 году Let's Encrypt выдавал более 3 миллионов сертификатов в день
- Проект спонсируется Mozilla, Google, Facebook, и другими IT-гигантами
- Благодаря Let's Encrypt доля HTTPS-трафика выросла с 40% в 2016 до 95% в 2023
- Самый длинный сертификат содержал 100 доменов (максимально допустимое количество)
Автоматизация для DevOps
Let's Encrypt отлично интегрируется в CI/CD пайплайны:
# GitHub Actions для автоматического обновления сертификатов
name: Update SSL Certificates
on:
schedule:
- cron: '0 12 * * *' # Каждый день в полдень
workflow_dispatch:
jobs:
update-certs:
runs-on: ubuntu-latest
steps:
- name: Connect to server and renew certificates
uses: appleboy/ssh-action@v0.1.4
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
sudo certbot renew --quiet
sudo systemctl reload nginx
Troubleshooting и отладка
Полезные команды для диагностики проблем:
# Проверка статуса сертификатов
sudo certbot certificates
# Детальная информация о сертификате
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -text -noout
# Проверка SSL-конфигурации
sudo nginx -t
sudo apache2ctl configtest
# Просмотр логов
sudo tail -f /var/log/letsencrypt/letsencrypt.log
sudo journalctl -u certbot.timer
# Тестирование SSL-соединения
openssl s_client -connect example.com:443 -servername example.com
Заключение и рекомендации
Let's Encrypt кардинально изменил ландшафт веб-безопасности, сделав SSL-сертификаты доступными для всех. Сегодня отсутствие HTTPS — это скорее исключение, чем правило.
Когда использовать Let's Encrypt:
- Для всех публичных веб-сайтов и API
- В dev/staging окружениях
- Для личных проектов и стартапов
- В микросервисной архитектуре
Когда рассмотреть платные альтернативы:
- Корпоративные сайты, где важен Extended Validation (EV)
- Приложения с особыми требованиями к SLA
- Случаи, когда нужна техническая поддержка 24/7
Лучшие практики:
- Всегда настраивайте автоматическое обновление
- Используйте мониторинг сроков действия сертификатов
- Для production настройте резервные методы валидации
- Регулярно проверяйте SSL-конфигурацию на сайтах типа SSL Labs
Если вы только начинаете свой путь в администрировании серверов, рекомендую арендовать VPS для экспериментов с Let's Encrypt, а для более серьезных проектов рассмотрите выделенный сервер.
Let's Encrypt — это не просто бесплатные сертификаты, это философия открытого и безопасного интернета. Используйте их, автоматизируйте, делитесь знаниями — и интернет станет чуточку безопаснее.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.