Включение валидации 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.
Загрузка сертификата УЦ:
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"
}'
Просмотр сертификатов УЦ:
curl -X GET --location 'https://api.gcore.com/cdn/sslCertificates' \
--header 'Authorization: APIKey eyJ0eXAiOiJKV'
Загрузка цепочки сертификатов источника и приватного ключа:
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"
}'
Просмотр сертификатов серверов:
curl -X GET --location 'https://api.gcore.com/cdn/sslData' \
--header 'Authorization: APIKey eyJ0eXAiOiJKV'
Влючение проверки сертификата источника
Просмотр ресурсов CDN:
curl --location 'https://api.gcore.com/cdn/resources' \
--header 'Authorization: APIKey eyJ0eXAiOiJKV'
Влючение проверки сертификата сервера-источника. Т. к. метод PUT, то отправляем полные данные ресурса, полученные в предыдущем шаге. Заполняем идентификатор ресурса в URL и поля активации функции (proxy_ssl_enabled), идентификатор сертификата УЦ (proxy_ssl_ca), идентификатор сертификата сервера (proxy_ssl_data):
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,
...
}'
Сбрасываем кэш. Готово.
Список использованных материалов
- What is Origin SSL Certificate Verification
- Permanent API token. Create, use and delete
- Cloudflare SSL/TLS encryption modes – Full
- CloudFlare SSL/TLS encryption modes – Full (strict)
- Gcore API – Authentication
- Gcore API – Login
- Gcore API – Change CDN Resource
- Gcore API – CA Certificates
- Gcore API – SSL Certificates