Настройка SSL сертификатов (Let's Encrypt)
Содержание
- 1 Настройка SSL сертификатов (Let's Encrypt)
- 1.1 1. Подготовка системы
- 1.2 2. Установка Certbot
- 1.3 3. Получение SSL сертификата
- 1.4 4. Проверка сертификата
- 1.5 5. Настройка автоматического обновления
- 1.6 6. Настройка для Apache
- 1.7 7. Настройка для Nginx
- 1.8 8. Настройка файрвола
- 1.9 9. Дополнительные настройки безопасности
- 1.10 10. Мониторинг и уведомления
- 1.11 11. Устранение неполадок
- 1.12 12. Дополнительные возможности
- 1.13 Заключение
Настройка SSL сертификатов (Let's Encrypt)
1. Подготовка системы
- Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
- Убедитесь, что домен указывает на ваш сервер (A-запись в DNS).
2. Установка Certbot
Для Ubuntu/Debian
1. Обновите список пакетов:
sudo apt update
2. Установите Certbot:
sudo apt install certbot
3. Установите плагин для вашего веб-сервера:
sudo apt install python3-certbot-apache
sudo apt install python3-certbot-nginx
Для CentOS/RHEL/Fedora
1. Установите EPEL репозиторий:
sudo yum install epel-release
2. Установите Certbot:
sudo yum install certbot python3-certbot-apache
3. Получение SSL сертификата
Автоматическая настройка для Apache
1. Получите сертификат и автоматически настроите Apache:
sudo certbot --apache -d example.com -d www.example.com
2. Следуйте инструкциям:
- Введите email адрес для уведомлений
- Согласитесь с условиями (A)
- Выберите опцию перенаправления (2 - рекомендуется)
Автоматическая настройка для Nginx
1. Получите сертификат и автоматически настроите Nginx:
sudo certbot --nginx -d example.com -d www.example.com
2. Следуйте инструкциям аналогично Apache.
Ручная настройка (без автоматической конфигурации)
1. Получите только сертификат:
sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
2. Сертификаты будут сохранены в:
/etc/letsencrypt/live/example.com/
4. Проверка сертификата
1. Проверьте статус сертификатов:
sudo certbot certificates
2. Проверьте автоматическое обновление:
sudo certbot renew --dry-run
3. Откройте сайт в браузере: https://example.com
5. Настройка автоматического обновления
Настройка cron задачи
1. Откройте crontab:
sudo crontab -e
2. Добавьте задачу обновления:
0 12 * * * /usr/bin/certbot renew --quiet
0 0 * * * /usr/bin/certbot renew --quiet
Настройка systemd таймера
1. Проверьте статус таймера:
sudo systemctl status certbot.timer
2. Включите автозапуск:
sudo systemctl enable certbot.timer
6. Настройка для Apache
Ручная настройка виртуального хоста
1. Создайте файл конфигурации SSL:
sudo nano /etc/apache2/sites-available/example.com-ssl.conf
2. Добавьте конфигурацию:
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
<Directory /var/www/example.com/public_html>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
3. Включите SSL модуль и сайт:
sudo a2enmod ssl
sudo a2ensite example.com-ssl.conf
sudo systemctl restart apache2
7. Настройка для Nginx
Ручная настройка SSL в Nginx
1. Отредактируйте конфигурацию сайта:
sudo nano /etc/nginx/sites-available/example.com
2. Добавьте SSL конфигурацию:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.html index.php;
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-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
3. Проверьте конфигурацию и перезапустите Nginx:
sudo nginx -t
sudo systemctl restart nginx
8. Настройка файрвола
Для Ubuntu/Debian (ufw)
1. Разрешите HTTPS трафик:
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
Для CentOS/RHEL (firewalld)
1. Разрешите HTTPS и HTTP:
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
9. Дополнительные настройки безопасности
Настройка HSTS
1. Для Apache добавьте в конфигурацию:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
2. Для Nginx добавьте:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Настройка OCSP Stapling
1. Для Apache добавьте:
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
2. Для Nginx добавьте:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
10. Мониторинг и уведомления
Настройка уведомлений по email
1. Создайте скрипт для проверки сертификатов:
sudo nano /usr/local/bin/ssl-check.sh
2. Добавьте содержимое:
DOMAIN="example.com"
DAYS=30
CERT_PATH="/etc/letsencrypt/live/$DOMAIN/cert.pem"
if [ -f "$CERT_PATH" ]; then
EXPIRY_DATE=$(openssl x509 -enddate -noout -in "$CERT_PATH" | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY_DATE" +%s)
CURRENT_EPOCH=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - CURRENT_EPOCH) / 86400 ))
if [ $DAYS_LEFT -lt $DAYS ]; then
echo "SSL сертификат для $DOMAIN истекает через $DAYS_LEFT дней!" | mail -s "SSL сертификат истекает" admin@example.com
fi
fi
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/ssl-check.sh
4. Добавьте в crontab:
0 9 * * * /usr/local/bin/ssl-check.sh
11. Устранение неполадок
Частые проблемы
1. Ошибка "Domain validation failed":
- Проверьте, что домен указывает на ваш сервер
- Убедитесь, что порты 80 и 443 открыты
2. Ошибка "Too many requests":
- Let's Encrypt имеет лимит 5 сертификатов в неделю на домен
- Подождите или используйте staging окружение
3. Ошибка "Certificate not found":
- Проверьте путь к сертификатам
- Убедитесь, что сертификат был получен успешно
Проверка сертификата
1. Проверьте детали сертификата:
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -text -noout
2. Проверьте цепочку сертификатов:
openssl verify -CAfile /etc/letsencrypt/live/example.com/chain.pem /etc/letsencrypt/live/example.com/cert.pem
12. Дополнительные возможности
Получение wildcard сертификата
1. Установите DNS плагин:
sudo apt install python3-certbot-dns-cloudflare
2. Получите wildcard сертификат:
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cloudflare.ini -d "*.example.com" -d example.com
Использование staging окружения
1. Получите тестовый сертификат:
sudo certbot --staging -d example.com
2. После успешного тестирования получите реальный сертификат:
sudo certbot -d example.com
Заключение
SSL сертификаты Let's Encrypt успешно настроены! Ваш сайт теперь защищен шифрованием.
Для размещения ваших защищенных проектов на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных проектов с SSL
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой SSL сертификатов и обеспечением безопасности ваших сайтов!