15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
10.10.2024

Как установить 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.crt
  • Закрытый ключ (KEY): Содержимое private.key. Если вы генерировали CSR внутри cPanel, это поле автоматически заполняется из хранилища ключей cPanel.
  • Пакет центра сертификации (CABUNDLE): Содержимое 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-apache

    Debian / Ubuntu (Nginx):

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

    RHEL / AlmaLinux / Rocky Linux (Apache):

    sudo dnf install -y epel-release
    sudo dnf install -y certbot python3-certbot-apache

    RHEL / 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) в современных браузерах и генерирует предупреждения в консоли для пассивных ресурсов (изображений).

    Исправьте смешанный контент следующим образом:

    1. Обновите все жёстко закодированные URL http:// в вашей CMS или HTML на https:// или протокол-относительные //.
    2. Добавьте заголовок Content Security Policy с upgrade-insecure-requests в качестве временного универсального решения:
    add_header Content-Security-Policy "upgrade-insecure-requests" always;
    1. Используйте 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.

    15%

    Сэкономьте 15% на всех хостинговых услугах

    Проверьте свои навыки и получите скидку на любой тарифный план

    Используйте код:

    Skills
    Начать