Как установить SSL-сертификат на домен
SSL-сертификат (Secure Sockets Layer / TLS) — это криптографический мандат, выданный доверенным центром сертификации (CA), который подтверждает личность вашего сервера и устанавливает зашифрованный канал между сервером и браузером клиента. При правильной установке он переводит ваш сайт с http:// на https://, активирует значок замка в браузере и предотвращает перехват передаваемых данных атаками типа «человек посередине».
Для SEO Google использует HTTPS как подтверждённый сигнал ранжирования с 2014 года. Для пользователей отсутствующий или неправильно настроенный сертификат вызывает предупреждения безопасности в браузере, которые снижают конверсию. Независимо от того, управляете ли вы одной целевой страницей или многодоменной инфраструктурой, правильная настройка SSL — и её поддержание — является обязательным условием.
Предварительные требования
Прежде чем приступать к редактированию конфигурационных файлов, убедитесь, что у вас есть следующее:
- Зарегистрированное доменное имя, указывающее на IP-адрес вашего сервера с полностью распространёнными DNS. Вы можете зарегистрировать или перенести домен через Регистрацию доменов.
- Пакет SSL-сертификата от CA. Обычно он включает:
certificate.crt — ваш основной подписанный сертификат
private.key — закрытый ключ, сгенерированный вместе с вашим CSR
ca_bundle.crt — промежуточная цепочка CA (иногда называемая файлом цепочки)
Доступ к серверу или панели управления — учётные данные cPanel/Plesk или SSH root/sudo доступ к серверу.
Программное обеспечение веб-сервера — Apache или Nginx, запущенный и настроенный для вашего домена.
Открытый порт 443 — убедитесь, что ваш брандмауэр разрешает входящий TCP на порту 443 перед установкой.
Если вы используете среду VPS Хостинга, у вас будет полный root-доступ и вы сможете использовать любой из трёх методов ниже. Пользователи общего хостинга, как правило, ограничены методом cPanel.
Выбор правильного типа SSL-сертификата
Не все сертификаты равнозначны. Выбор неправильного типа приводит к напрасным расходам или пробелам в защите.
Тип сертификата
Уровень проверки
Время выдачи
Замок в браузере
Лучше всего для
—
—
—
—
—
DV (Domain Validated)
Только контроль домена
Минуты
Да
Блоги, среды разработки, небольшие сайты
OV (Organization Validated)
Домен + идентификация организации
1–3 дня
Да
Корпоративные сайты, SaaS-платформы
EV (Extended Validation)
Полная проверка юридического лица
3–7 дней
Да (название организации в некоторых браузерах)
Электронная коммерция, банкинг, порталы с высоким уровнем доверия
Wildcard (`*.domain.com`)
DV или OV
Минуты–дни
Да
Развёртывания с несколькими поддоменами
Multi-Domain (SAN)
DV, OV или EV
Варьируется
Да
Несколько отдельных доменов на одном сертификате
Let’s Encrypt (бесплатный DV)
Только контроль домена
Секунды
Да
Любой публично доступный домен
Для производственной электронной коммерции или любого сайта, обрабатывающего данные платёжных карт, настоятельно рекомендуются сертификаты OV или EV от коммерческого CA. Сертификаты Let’s Encrypt DV полностью доверенные и отлично подходят для большинства случаев использования, однако они не включают проверку идентификации организации.
Вы можете приобрести коммерческие сертификаты напрямую через SSL-сертификаты, если вам нужна защита OV, EV или Wildcard с выделенной поддержкой.
Метод 1: Установка SSL-сертификата через cPanel
Графический интерфейс cPanel — это самый быстрый способ для пользователей управляемых или тарифов общего веб-хостинга. Если вы предпочитаете среду VPS под управлением cPanel, VPS с cPanel предоставляет тот же интерфейс с полным контролем над сервером.
Шаг 1: Войдите в cPanel
Перейдите по URL для входа в cPanel:
https://yourdomain.com:2083
Авторизуйтесь с помощью учётных данных хостинга.
Шаг 2: Перейдите в менеджер SSL/TLS
В разделе Безопасность панели управления cPanel нажмите SSL/TLS. Затем выберите Управление SSL-сайтами под заголовком «Установка и управление SSL для вашего сайта (HTTPS)».
Шаг 3: Выберите целевой домен
Используйте выпадающий список Домен, чтобы выбрать домен, который вы хотите защитить. Если домен не отображается, убедитесь, что он добавлен как дополнительный или основной домен в cPanel.
Шаг 4: Вставьте компоненты сертификата
Откройте каждый файл сертификата в текстовом редакторе (не в Word) и вставьте содержимое в соответствующие поля:
Сертификат (CRT): Содержимое certificate.crtprivate.key. Если вы генерировали CSR внутри cPanel, это поле автоматически заполняется из хранилища ключей cPanel.ca_bundle.crt. Пропуск этого поля является одной из наиболее распространённых причин ошибок «ненадёжный сертификат» на мобильных устройствах и в старых браузерах, поскольку браузер не может построить цепочку до доверенного корневого сертификата.Шаг 5: Установите и проверьте
Нажмите Установить сертификат. cPanel проверяет соответствие ключа и сертификата перед применением. Если между закрытым ключом и открытым ключом сертификата есть несоответствие, cPanel отклонит установку с явным сообщением об ошибке — не игнорируйте его.
После установки перейдите по адресу https://yourdomain.com и убедитесь, что отображается значок замка. Также проверьте https://www.yourdomain.com, если поддомен www используется.
Распространённая ошибка cPanel: AutoSSL (встроенная интеграция Let’s Encrypt в cPanel) может перезаписать вручную установленный сертификат при следующем цикле обновления. Если вы установили коммерческий сертификат, отключите AutoSSL для этого домена в разделе cPanel > Статус SSL/TLS, чтобы предотвратить непреднамеренную замену.
Метод 2: Автоматическая установка с Let’s Encrypt и Certbot
Certbot — это эталонный ACME-клиент для Let’s Encrypt. Он автоматически выполняет генерацию CSR, проверку домена, получение сертификата, настройку веб-сервера и обновление. Это правильный подход для любого Linux-сервера, которым вы управляете напрямую.
Шаг 1: Подключитесь к серверу через SSH
ssh username@your-server-ipШаг 2: Установите Certbot
Debian / Ubuntu (Apache):
sudo apt update && sudo apt install -y certbot python3-certbot-apacheDebian / Ubuntu (Nginx):
sudo apt update && sudo apt install -y certbot python3-certbot-nginxRHEL / AlmaLinux / Rocky Linux (Apache):
sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-apacheRHEL / AlmaLinux / Rocky Linux (Nginx):
sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-nginxШаг 3: Получите и установите сертификат
Для Apache:
sudo certbot --apache -d yourdomain.com -d www.yourdomain.comДля Nginx:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.comПо умолчанию Certbot выполняет проверку HTTP-01: он помещает временный файл в корневую директорию вашего сайта и просит серверы Let’s Encrypt получить его через порт 80. Это означает, что порт 80 должен быть открыт, а DNS должен корректно разрешаться перед выполнением команды.
При появлении запроса выберите опцию перенаправить весь HTTP-трафик на HTTPS. Это записывает постоянное перенаправление 301 в конфигурацию вашего сервера, что является правильным поведением для SEO и безопасности.
Шаг 4: Проверьте автоматическое обновление
Сертификаты Let’s Encrypt истекают через 90 дней. Certbot устанавливает таймер systemd (или задание cron на старых системах), который дважды в день пытается выполнить обновление, когда до истечения сертификата остаётся 30 дней. Проверьте логику обновления без фактического обновления:
sudo certbot renew --dry-runУспешный пробный запуск подтверждает, что конвейер обновления работает. Проверьте статус таймера с помощью:
systemctl status certbot.timerОсобый случай — проверка DNS-01 для wildcard-сертификатов: Проверка HTTP-01 не может подтвердить wildcard-домены (*.yourdomain.com). Для wildcard используйте проверку DNS-01, которая требует создания TXT-записи _acme-challenge в вашей DNS-зоне:
sudo certbot certonly --manual --preferred-challenges dns -d "*.yourdomain.com" -d yourdomain.comСледуйте инструкциям для добавления TXT-записи, дождитесь распространения DNS, затем нажмите Enter для завершения проверки.
Метод 3: Ручная установка SSL через SSH (Apache и Nginx)
Ручная установка даёт вам точный контроль над размещением сертификата, наборами шифров и конфигурацией виртуального хоста. Это предпочтительный подход для производственных серверов, где необходимо применять конкретные политики TLS.
Шаг 1: Загрузите файлы сертификата на сервер
Используйте scp для передачи файлов с вашего локального компьютера:
scp certificate.crt private.key ca_bundle.crt username@your-server-ip:/tmp/Затем переместите их в защищённую директорию, недоступную из интернета:
sudo mkdir -p /etc/ssl/yourdomain
sudo mv /tmp/certificate.crt /etc/ssl/yourdomain/
sudo mv /tmp/private.key /etc/ssl/yourdomain/
sudo mv /tmp/ca_bundle.crt /etc/ssl/yourdomain/
sudo chmod 600 /etc/ssl/yourdomain/private.key
sudo chmod 644 /etc/ssl/yourdomain/certificate.crt /etc/ssl/yourdomain/ca_bundle.crtВажное замечание по безопасности: Закрытый ключ никогда не должен быть доступен для чтения всем пользователям. Разрешение chmod 600 ограничивает доступ только пользователем root. На системах, где Apache или Nginx работает от имени непривилегированного пользователя (например, www-data), служба всё равно читает ключ при запуске, работая от имени root до снижения привилегий — поэтому 600 с владельцем root является правильным.
Шаг 2a: Настройка Apache
Отредактируйте конфигурацию виртуального хоста для вашего домена:
sudo nano /etc/apache2/sites-available/yourdomain.com.confДобавьте или измените блок виртуального хоста SSL:
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
SSLEngine on
SSLCertificateFile /etc/ssl/yourdomain/certificate.crt
SSLCertificateKeyFile /etc/ssl/yourdomain/private.key
SSLCertificateChainFile /etc/ssl/yourdomain/ca_bundle.crt
# Modern TLS hardening
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
DocumentRoot /var/www/yourdomain
</VirtualHost>Включите модуль SSL и сайт, затем перезапустите Apache:
sudo a2enmod ssl headers
sudo a2ensite yourdomain.com.conf
sudo apache2ctl configtest
sudo systemctl restart apache2Всегда выполняйте apache2ctl configtest перед перезапуском. Синтаксическая ошибка в конфигурационном файле приведёт к остановке всего веб-сервера.
Шаг 2b: Настройка Nginx
Отредактируйте серверный блок вашего домена:
sudo nano /etc/nginx/sites-available/yourdomain.comДобавьте следующую конфигурацию:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://yourdomain.com$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/ssl/yourdomain/certificate.crt;
ssl_certificate_key /etc/ssl/yourdomain/private.key;
ssl_trusted_certificate /etc/ssl/yourdomain/ca_bundle.crt;
# Modern TLS hardening
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
root /var/www/yourdomain;
index index.html index.php;
}Включите сайт и выполните проверку:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxПояснение OCSP Stapling: Без stapling браузер должен обращаться к OCSP-ответчику CA при каждом TLS-рукопожатии, чтобы проверить, не был ли сертификат отозван. Это добавляет задержку и передаёт данные о просмотре CA. С ssl_stapling on Nginx кэширует ответ OCSP и передаёт его непосредственно клиенту, устраняя дополнительный запрос.
Усиление TLS: что упускает стандартная конфигурация
Сертификат, установленный с настройками по умолчанию, является безопасным, но не усиленным. В следующей таблице приведены дополнительные директивы, которые отличают проходную оценку SSL Labs от A+:
| Директива усиления | Директива Apache | Директива Nginx | Назначение |
|---|---|---|---|
| — | — | — | — |
| Отключить TLS 1.0 / 1.1 | `SSLProtocol all -TLSv1 -TLSv1.1` | `ssl_protocols TLSv1.2 TLSv1.3` | Устранить уязвимости устаревших протоколов |
| Заголовок HSTS | `Header always set Strict-Transport-Security` | `add_header Strict-Transport-Security` | Принудительно использовать HTTPS на уровне браузера, предотвратить SSL stripping |
| OCSP Stapling | `SSLUseStapling on` | `ssl_stapling on` | Снизить задержку рукопожатия, улучшить конфиденциальность |
| Отключить session tickets | `SSLSessionTickets off` | `ssl_session_tickets off` | Предотвратить деградацию прямой секретности |
| Надёжный набор шифров | `SSLCipherSuite ECDHE-…` | `ssl_ciphers ECDHE-…` | Применять шифры AEAD, исключить RC4/3DES |
| HTTP/2 | `Protocols h2 http/1.1` | `listen 443 ssl http2` | Улучшение производительности через TLS |
Проверка и тестирование установки SSL
Установка не считается завершённой, пока вы не проверили результат с внешней точки зрения.
Проверка в браузере
Перейдите по адресу https://yourdomain.com. Значок замка подтверждает наличие действительного доверенного сертификата. Нажмите на замок и изучите детали сертификата: убедитесь, что Common Name или Subject Alternative Name соответствует вашему домену, и проверьте дату истечения срока действия.
Тест сервера SSL Labs
Перейдите на SSL Labs и введите ваш домен. Отчёт оценивает вашу конфигурацию TLS от F до A+ и указывает на конкретные проблемы: слабые наборы шифров, отсутствующие сертификаты цепочки, отсутствие HSTS и поддержку протоколов. Рейтинг A+ требует HSTS с длинным max-age и отсутствия поддержки TLS 1.0 или 1.1.
Проверка через командную строку с OpenSSL
openssl s_client -connect yourdomain.com:443 -servername yourdomain.comЭто выводит полную цепочку сертификатов, согласованный набор шифров и версию TLS. Ищите Verify return code: 0 (ok) в конце вывода. Любой ненулевой код возврата указывает на проблему с цепочкой или доверием.
Чтобы проверить дату истечения срока действия сертификата напрямую:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -datesПроверка на смешанный контент
После включения HTTPS смешанный контент является наиболее распространённой остаточной проблемой. Она возникает, когда страница HTTPS загружает ресурсы (изображения, скрипты, таблицы стилей, iframe) через HTTP. Смешанный контент полностью блокирует активные ресурсы (скрипты, iframe) в современных браузерах и генерирует предупреждения в консоли для пассивных ресурсов (изображений).
Исправьте смешанный контент следующим образом:
- Обновите все жёстко закодированные URL
http://в вашей CMS или HTML наhttps://или протокол-относительные//. - Добавьте заголовок Content Security Policy с
upgrade-insecure-requestsв качестве временного универсального решения:
add_header Content-Security-Policy "upgrade-insecure-requests" always;- Используйте DevTools браузера (F12 > Консоль) для определения конкретных проблемных ресурсов.
Обновление сертификата и управление жизненным циклом
| Источник сертификата | Срок действия по умолчанию | Метод обновления | Автоматизация |
|---|---|---|---|
| — | — | — | — |
| Let’s Encrypt (Certbot) | 90 дней | `certbot renew` через таймер systemd | Полностью автоматически |
| Коммерческий CA (cPanel) | 1–2 года | Ручное переиздание и переустановка | Вручную или по скрипту |
| Коммерческий CA (SSH) | 1–2 года | Замена файлов, перезагрузка веб-сервера | Автоматизируется через cron |
| Внутренний CA / самоподписанный | Произвольный | Вручную | Вручную |
Для коммерческих сертификатов, управляемых вручную, установите напоминание в календаре за 30 дней до истечения срока действия. Просроченный сертификат хуже, чем его отсутствие — браузеры отображают полностраничную блокирующую ошибку, которую пользователи не могут легко обойти.
Если вы управляете несколькими доменами или высоконагруженным приложением на Выделенном сервере, рассмотрите возможность внедрения централизованного решения для управления сертификатами, такого как cert-manager (Kubernetes), Vault PKI или wildcard-сертификат, чтобы снизить накладные расходы на обновление для поддоменов.
Матрица решений: какой метод установки использовать
| Сценарий | Рекомендуемый метод |
|---|---|
| — | — |
| Общий хостинг, нет доступа по SSH | Менеджер SSL/TLS в cPanel |
| VPS или выделенный сервер, нужен бесплатный сертификат | Certbot (Let’s Encrypt) |
| VPS или выделенный сервер, коммерческий сертификат OV/EV | Ручная установка через SSH |
| Wildcard-сертификат (`*.domain.com`) | Ручная установка через SSH + проверка DNS-01 через Certbot |
| Многодоменный SAN-сертификат | Ручная установка через SSH |
| Нет технического опыта, управляемый хостинг | AutoSSL в cPanel или SSL в один клик от хостинг-провайдера |
Технический контрольный список ключевых выводов
- Убедитесь, что порт 443 открыт в брандмауэре перед установкой любого сертификата.
- Всегда проверяйте соответствие закрытого ключа сертификату перед установкой:
openssl x509 -noout -modulus -in certificate.crt | md5sumиopenssl rsa -noout -modulus -in private.key | md5sumдолжны давать одинаковые хэши. - Включите полную промежуточную цепочку (
ca_bundle.crt) — её отсутствие вызывает ошибки доверия в мобильных браузерах, даже когда настольный Chrome показывает замок. - Установите
chmod 600для файла закрытого ключа; никогда не размещайте его в директории, доступной из интернета. - Отключите TLS 1.0 и TLS 1.1 в конфигурации веб-сервера — эти протоколы устарели и уязвимы.
- Включайте HSTS с
includeSubDomainsтолько после подтверждения того, что все поддомены также обслуживают HTTPS. - Выполните
certbot renew --dry-runпосле первоначальной настройки Certbot, чтобы убедиться в работоспособности конвейера обновления. - Тестируйте с помощью SSL Labs после каждой установки или изменения конфигурации.
- Немедленно проверяйте наличие смешанного контента после перехода на HTTPS — он незаметно нарушает функциональность.
- Для wildcard-сертификатов Let’s Encrypt используйте проверку DNS-01, а не HTTP-01.
Часто задаваемые вопросы
В чём разница между SSL-сертификатом и TLS-сертификатом?
SSL (Secure Sockets Layer) — это устаревший протокол, который был признан устаревшим в 1999 году. Его преемник, TLS (Transport Layer Security), — это то, что фактически используют все современные HTTPS-соединения. Термин «SSL-сертификат» сохранился как отраслевое сокращение, но каждый выданный сегодня сертификат работает через TLS 1.2 или TLS 1.3.
Почему мой SSL-сертификат отображается как доверенный в Chrome, но не на устройствах Android?
Это почти всегда связано с отсутствующей цепочкой промежуточных сертификатов. Настольный Chrome имеет агрессивный механизм получения сертификатов (AIA fetching), который может восстановить цепочку даже при её отсутствии на сервере. Системное хранилище Android этого не делает. Всегда включайте файл цепочки ca_bundle.crt в конфигурацию вашего сервера.
Можно ли установить SSL-сертификат на домен, у которого ещё нет сайта?
Да, но только если A-запись DNS домена разрешается в IP-адрес сервера. CA должен иметь возможность обратиться к серверу для завершения проверки домена. Если DNS ещё не распространился, проверка завершится неудачей.
Как обновить коммерческий SSL-сертификат без простоя?
Сгенерируйте новый CSR на сервере, отправьте его в ваш CA, получите новый пакет сертификата, замените файлы сертификата на сервере и перезагрузите веб-сервер (systemctl reload apache2 или systemctl reload nginx). Перезагрузка применяет новый сертификат без разрыва существующих соединений, в отличие от полного перезапуска.
Автоматически ли установка SSL-сертификата перенаправляет HTTP на HTTPS?
Нет. Установка сертификата только включает HTTPS. Перенаправление с HTTP на HTTPS должно быть настроено отдельно в вашем виртуальном хосте или серверном блоке. Плагины --apache и --nginx Certbot предлагают автоматически настроить это перенаправление во время установки. Для ручных установок добавьте явную директиву Redirect permanent (Apache) или return 301 (Nginx) в серверный блок порта 80.
