Настройка SSL сертификатов (Let's Encrypt)

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск

Содержание

Настройка 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):

Наши специалисты помогут с настройкой SSL сертификатов и обеспечением безопасности ваших сайтов!