SSL-сертификаты
Загрузите общий SSL-сертификат в аккаунт Shared Hosting для включения HTTPS: преобразование формата и продление.
В этом руководстве описано, как установить SSL-сертификат на Shared Hosting, чтобы сайт был доступен по HTTPS.
Как это работает
Shared Hosting использует общий SSL-сертификат: у каждого аккаунта хостинга один сертификат, который после загрузки применяется ко всем доменам, привязанным к этому аккаунту. Поэтому сертификат должен охватывать все домены, которые вы хотите обслуживать по HTTPS. Подойдёт один из следующих вариантов:
- Мультидоменный сертификат, в котором все домены перечислены в Subject Alternative Names (SAN), например и
example.com, иwww.example.com. - Wildcard-сертификат, например
*.example.com. Маска не охватывает корневой доменexample.com, поэтому добавьте его в SAN отдельно.
На момент написания все тарифы Shared Hosting поддерживают SSL-сертификаты.
Подготовка файлов сертификата
Вам понадобятся два фрагмента текста в формате PEM:
| Элемент | Формат |
|---|---|
| SSL-сертификаты | Начинается с -----BEGIN CERTIFICATE----- и заканчивается -----END CERTIFICATE----- |
| Закрытый ключ | Начинается с -----BEGIN PRIVATE KEY----- или -----BEGIN RSA PRIVATE KEY----- и не должен быть защищён парольной фразой |
Центры сертификации обычно предоставляют сертификат сайта и один или несколько промежуточных сертификатов. Сначала вставьте сертификат сайта, затем все промежуточные сертификаты, чтобы сформировать полную цепочку. Иначе некоторые браузеры и клиенты могут считать сертификат недоверенным.
Преобразование распространённых форматов
Форма не принимает закрытый ключ, начинающийся с -----BEGIN EC PRIVATE KEY----- (типично для сертификатов ECC), или ключ, защищённый парольной фразой. Сначала преобразуйте его в незашифрованный PKCS#8 с помощью OpenSSL:
openssl pkcs8 -topk8 -nocrypt -in original.key -out private.keyЕсли у вас файл .pfx или .p12, разделите его следующим образом:
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out chain.pem
openssl pkcs12 -in cert.pfx -nocerts -nodes -out original.key
openssl pkcs8 -topk8 -nocrypt -in original.key -out private.key
cat cert.pem chain.pem > fullchain.pemПроверка перед загрузкой
Сервер проверяет, что сертификат и закрытый ключ соответствуют друг другу. Вы можете заранее проверить это самостоятельно:
# Show the domains and expiry date in the certificate
openssl x509 -in fullchain.pem -noout -subject -enddate -ext subjectAltName
# If these two commands print the same hash, the certificate and key match
openssl x509 -in fullchain.pem -noout -pubkey | openssl sha256
openssl pkey -in private.key -pubout | openssl sha256Установка сертификата
- В списке Виртуальный хостинг нажмите Управление для нужного аккаунта хостинга.
- Перейдите на вкладку SSL-сертификаты и нажмите Загрузить SSL-сертификат.
- Вставьте полную цепочку в SSL-сертификаты, а закрытый ключ — в Закрытый ключ.
- Нажмите Загрузить. Сообщение "SSL-сертификат загружен" означает, что сертификат установлен.
Если возникает ошибка, обычно причина одна из следующих:
| Сообщение | Причина и решение |
|---|---|
| Введите корректный сертификат / ключ PEM | В тексте отсутствуют строки BEGIN/END или тип ключа не поддерживается. Преобразуйте его, как описано выше |
| Некорректный сертификат / ключ | Текст обрезан или содержит лишние символы. Снова скопируйте содержимое целиком |
| Сертификат и ключ не соответствуют друг другу | Этот ключ не относится к данному сертификату |
| Тариф не поддерживает SSL | SSL не входит в ваш тариф |
Проверка HTTPS
После установки сертификата откройте https://your-domain в браузере и убедитесь, что в адресной строке отображается защищённое соединение. Также можно проверить сертификат, возвращаемый сервером, из командной строки:
openssl s_client -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -enddateНа момент написания на вкладке SSL-сертификаты после успешной загрузки всё ещё может отображаться "SSL-сертификат не развёрнут". Ориентируйтесь на сообщение об успешной загрузке и результат реального HTTPS-запроса.
Перенаправление на HTTPS
После установки сертификата сайт принимает запросы и по HTTP, и по HTTPS. Чтобы посетители всегда использовали HTTPS, добавьте перенаправление в приложении. Для сайта на PHP поместите следующий код в начало входного файла:
<?php
$isHttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| (isset($_SERVER['SERVER_PORT']) && (int)$_SERVER['SERVER_PORT'] === 443);
if (!$isHttps) {
header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], true, 301);
exit;
}Перед добавлением перенаправления убедитесь, что HTTPS работает. Для WordPress и подобных приложений также необходимо изменить адрес сайта в панели администратора на адрес, начинающийся с https://.
Продление
Сертификаты на Shared Hosting не продлеваются автоматически. До истечения срока действия получите новый сертификат в своём центре сертификации и снова загрузите его на вкладке SSL-сертификаты. Новый сертификат заменит старый. Рекомендуется выполнить замену как минимум за две недели до истечения срока действия.
Установка через API
Эту конечную точку использует консоль. {name} — имя аккаунта хостинга, совпадающее с именем пользователя базы данных. Передайте токен входа вместе с запросом:
jq -n --rawfile cert fullchain.pem --rawfile key private.key \
'{certificate: $cert, certificate_key: $key}' \
| curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
https://api.yeap.cloud/api/user/host_shared/vhosts/name/{name}/ssl-full -d @-Формирование тела запроса с помощью jq сохраняет переносы строк в тексте PEM.