Содержание

Включение валидации SSL-сертификата источника в Gcore

Сюрприз-сюрприз сертификат нашего / вашего сервера не проверяется по умолчанию на валидность в Gcore CDN. Cоединение CDN<->Origin является Hypertext Transfer Protocol Secure, но есть нюанс.

При настройке протокола взаимодействия с источником вы указываете протокол, по которому серверы CDN будут обращаться к источнику за контентом. Вы решаете, должно ли соединение быть зашифровано (HTTPS) или нет (HTTP). Если выбран HTTPS, серверы кэширования будут получать контент из источника по HTTPS. Этот процесс зашифрован, но не защищает от атак «человек посередине», потому что по умолчанию кеш-сервер не проверяет

ни-че-го 🙂
Привет, Full SSL/TLS encryption mode 😀
На момент написания заметки в Gcore этот режим включается только через API. Тут, кстати, своеобразная реализация этой проверки: нужно загрузить сертификат УЦ и сертификат сервера-источника. Проверка идёт именно по сопоставлению сертификатов, а не, как у Cloudflare, по подписи доверенным УЦ. При этом у Gcore досадная недоработка: вместе с сертификатом источника нужно загружать и приватный ключ.

Доступ к API осуществляется с помощью токена доступа (access token) либо ключа API (API Key). Access token выдаётся при логине, действует 1 час, можно перевыпускать. API Key – постоянный токен, выпускается в панели управления.

Манипуляции с API буду проводить с помощью cURL.

Загрузка сертификата УЦ:

shell

curl -X POST --location 'https://api.gcore.com/cdn/sslCertificates' \
--header 'Authorization: APIKey eyJ0eXAiOiJKV' \
--header 'Content-Type: application/json' \
--data '{
    "name": "Example CA cert",
    "sslCertificate": "-----BEGIN CERTIFICATE-----\nMIIC0zCC...wUAP2g==\n-----END CERTIFICATE-----\n"
}'

Просмотр сертификатов УЦ:

shell

curl -X GET --location 'https://api.gcore.com/cdn/sslCertificates' \
--header 'Authorization: APIKey eyJ0eXAiOiJKV'

Загрузка цепочки сертификатов источника и приватного ключа:

shell

curl -X POST --location 'https://api.gcore.com/cdn/sslData' \
--header 'Authorization: APIKey eyJ0eXAiOiJKV' \
--header 'Content-Type: application/json' \
--data '{
    "name": "Example Origin cert",
    "sslCertificate": "-----BEGIN CERTIFICATE-----\nMIIFWzCC...1ol+mw==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIEkjCC...NFu0Qg==\n-----END CERTIFICATE-----\n",
    "sslPrivateKey": "-----BEGIN PRIVATE KEY-----\nMIIEvgIB...aB5hjDsd\n-----END PRIVATE KEY-----\n"
}'

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

shell

curl -X GET --location 'https://api.gcore.com/cdn/sslData' \
--header 'Authorization: APIKey eyJ0eXAiOiJKV'

Просмотр ресурсов CDN:

shell

curl --location 'https://api.gcore.com/cdn/resources' \
--header 'Authorization: APIKey eyJ0eXAiOiJKV'

Влючение проверки сертификата сервера-источника. Т. к. метод PUT, то отправляем полные данные ресурса, полученные в предыдущем шаге. Заполняем идентификатор ресурса в URL и поля активации функции (proxy_ssl_enabled), идентификатор сертификата УЦ (proxy_ssl_ca), идентификатор сертификата сервера (proxy_ssl_data):

shell

curl -X PUT --location 'https://api.gcore.com/cdn/resources/123456' \
--header 'Authorization: APIKey eyJ0eXAiOiJKV' \
--header 'Content-Type: application/json' \
--data '{
    "id": 123456,
    ...
    "proxy_ssl_enabled": true,
    "proxy_ssl_ca": 141523,
    "proxy_ssl_data": 141578,
    ...
}'

Сбрасываем кэш. Готово.

  1. What is Origin SSL Certificate Verification
  2. Permanent API token. Create, use and delete
  3. Cloudflare SSL/TLS encryption modes – Full
  4. CloudFlare SSL/TLS encryption modes – Full (strict)
  5. Gcore API – Authentication
  6. Gcore API – Login
  7. Gcore API – Change CDN Resource
  8. Gcore API – CA Certificates
  9. Gcore API – SSL Certificates