Skip to main content

Как установить SSL-сертификат на VPS

Это руководство объясняет, как установить бесплатный SSL-сертификат с Let's Encrypt и Certbot на вашем VPS для Nginx или Apache.

Заказать сервер

Для размещения ваших защищённых веб-сайтов, HostMyServers предлагает несколько вариантов:

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

  • SSH-доступ как root или пользователь с правами sudo
  • Доменное имя, указывающее на IP-адрес вашего сервера (DNS-запись A или AAAA)
  • Порты 80 (HTTP) и 443 (HTTPS) открыты в брандмауэре
  • Nginx или Apache установлен и настроен
  • Обновлённая система Debian/Ubuntu

Установка Certbot

Рекомендуемый метод: через Snap

Этот метод гарантирует наличие последней версии Certbot:

sudo apt update
sudo apt install snapd -y
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Альтернативный метод: через APT

Для Nginx:

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Для Apache:

sudo apt update
sudo apt install certbot python3-certbot-apache -y

Проверка конфигурации веб-сервера

Перед получением сертификата убедитесь, что ваш домен правильно настроен.

Для Nginx

Убедитесь, что блок сервера содержит правильный server_name:

sudo nano /etc/nginx/sites-available/ваш_домен

Файл должен содержать:

server {
listen 80;
listen [::]:80;
server_name ваш_домен.com www.ваш_домен.com;
root /var/www/ваш_домен;
index index.html index.htm index.php;

location / {
try_files $uri $uri/ =404;
}
}

Проверьте и перезагрузите конфигурацию:

sudo nginx -t
sudo systemctl reload nginx

Для Apache

Проверьте ваш VirtualHost:

sudo nano /etc/apache2/sites-available/ваш_домен.conf

Файл должен содержать:

<VirtualHost *:80>
ServerName ваш_домен.com
ServerAlias www.ваш_домен.com
DocumentRoot /var/www/ваш_домен

<Directory /var/www/ваш_домен>
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/ваш_домен-error.log
CustomLog ${APACHE_LOG_DIR}/ваш_домен-access.log combined
</VirtualHost>

Активируйте сайт и перезагрузите:

sudo a2ensite ваш_домен.conf
sudo apachectl configtest
sudo systemctl reload apache2

Получение SSL-сертификата

С Nginx

Запустите Certbot с плагином Nginx:

sudo certbot --nginx -d ваш_домен.com -d www.ваш_домен.com

Certbot:

  1. Проверит владение доменом
  2. Получит сертификат
  3. Автоматически настроит Nginx для HTTPS
  4. Настроит перенаправление HTTP → HTTPS

С Apache

Запустите Certbot с плагином Apache:

sudo certbot --apache -d ваш_домен.com -d www.ваш_домен.com

Certbot:

  1. Проверит владение доменом
  2. Получит сертификат
  3. Автоматически настроит Apache для HTTPS
  4. Включит модуль SSL при необходимости
Совет

Во время выполнения Certbot спросит, хотите ли вы автоматически перенаправлять HTTP-трафик на HTTPS. Выберите да для лучшей безопасности.

Ручная настройка (опционально)

Если вы предпочитаете настроить SSL вручную, используйте режим certonly:

sudo certbot certonly --webroot -w /var/www/ваш_домен -d ваш_домен.com -d www.ваш_домен.com

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

Измените блок сервера:

# Перенаправление HTTP на HTTPS
server {
listen 80;
listen [::]:80;
server_name ваш_домен.com www.ваш_домен.com;
return 301 https://$host$request_uri;
}

# Конфигурация HTTPS
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ваш_домен.com www.ваш_домен.com;

ssl_certificate /etc/letsencrypt/live/ваш_домен.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ваш_домен.com/privkey.pem;

# Рекомендуемые параметры SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;

root /var/www/ваш_домен;
index index.html index.htm index.php;

location / {
try_files $uri $uri/ =404;
}
}

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

Включите модуль SSL:

sudo a2enmod ssl
sudo a2enmod rewrite

Создайте или измените VirtualHost SSL:

# Перенаправление HTTP на HTTPS
<VirtualHost *:80>
ServerName ваш_домен.com
ServerAlias www.ваш_домен.com
Redirect permanent / https://ваш_домен.com/
</VirtualHost>

# Конфигурация HTTPS
<VirtualHost *:443>
ServerName ваш_домен.com
ServerAlias www.ваш_домен.com
DocumentRoot /var/www/ваш_домен

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/ваш_домен.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ваш_домен.com/privkey.pem

# Рекомендуемые параметры SSL
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder off

<Directory /var/www/ваш_домен>
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/ваш_домен-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/ваш_домен-ssl-access.log combined
</VirtualHost>

Перезагрузите Apache:

sudo systemctl restart apache2

Автоматическое продление

Сертификаты Let's Encrypt действительны 90 дней. Certbot автоматически настраивает продление.

Проверка автоматического продления

Протестируйте продление без фактического выполнения:

sudo certbot renew --dry-run

Проверка таймера systemd

sudo systemctl status certbot.timer

Принудительное продление

При необходимости вы можете принудительно продлить:

sudo certbot renew

Добавление хука перезагрузки

Для автоматической перезагрузки веб-сервера после продления:

Для Nginx:

sudo certbot renew --post-hook "systemctl reload nginx"

Для Apache:

sudo certbot renew --post-hook "systemctl reload apache2"

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

Через браузер

Перейдите на https://ваш_домен.com и нажмите на замок в адресной строке, чтобы увидеть детали сертификата.

Через командную строку

sudo certbot certificates

Тестирование конфигурации SSL

Используйте SSL Labs для тестирования конфигурации: https://www.ssllabs.com/ssltest/analyze.html?d=ваш_домен.com

Расширенная безопасность (опционально)

Включение HSTS

Для Nginx добавьте в блок сервера HTTPS:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Для Apache добавьте в VirtualHost HTTPS:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Не забудьте включить модуль headers для Apache:

sudo a2enmod headers
sudo systemctl restart apache2

При возникновении проблем

Ошибка валидации домена

  • Проверьте, что DNS указывает на ваш сервер: dig ваш_домен.com
  • Проверьте, что порты 80 и 443 открыты: sudo ufw status
  • Проверьте логи Certbot: sudo tail -f /var/log/letsencrypt/letsencrypt.log

Сайт недоступен по HTTPS

  • Проверьте конфигурацию веб-сервера
  • Проверьте, что порт 443 открыт в брандмауэре
  • Просмотрите логи веб-сервера:
    • Nginx: sudo tail -f /var/log/nginx/error.log
    • Apache: sudo tail -f /var/log/apache2/error.log

Отзыв сертификата

При необходимости вы можете отозвать сертификат:

sudo certbot revoke --cert-path /etc/letsencrypt/live/ваш_домен.com/cert.pem