Я пытаюсь настроить SSL для App Engine Google Cloud.
Вы можете загрузить свой собственный сертификат SSL + закрытый ключ в GCP (см. снимок экрана ).
Я использую Cloudflare для DNS и хотел бы использовать «полную (строгую)» политику SSL в Cloudflare. Это означало бы, что я должен добавить сертификат и ключ, созданные Cloudflare, в GCP (на том же скриншоте).
Мне удалось преобразовать закрытый ключ в допустимый (PEM) формат, который будет принимать GCP. Единственное, что не работает, это часть сертификата.
При вводе сертификата и ключа в GCP при нажатии кнопки загрузки выдается следующая ошибка:
The certificate data is invalid. Please ensure that the private key and public certificate match.
После некоторого поиска в Google я нашел следующие ресурсы в документации GCP , объясняющие, что мне нужна полная цепочка сертификатов , загруженная в поле сертификата. Итак, следующее, что я попробовал, это concat мой сертификат от cloudflare вместе с корневым сертификатом самого cloudflare, как объяснено в документации GCP.
Поэтому я запустил следующую команду для создания этой цепочки:
cat domain.crt cloudflare-root-ca.crt > concat.crt
... и загрузил его в GCP в поле сертификата.
Это тоже не сработало, даже если контрольные суммы как закрытого ключа, так и цепочки сертификатов совпадают с , объясненным в GCP docs , с помощью команды:
openssl x509 -noout -modulus -in concat.crt | openssl md5
openssl rsa -noout -modulus -in myserver.key.pem | openssl md5
... и сравнение выводов md5.
Так что теперь я полностью лишен идей. Сообщения об ошибках GCP ограничены приведенным выше, и одно сообщение о том, что ваш PK не является допустимым форматом.
Те же проблемы при попытке через CLI (gcloud)
При попытке выполнить этот процесс через Cli gcloud
, мы получаем те же ошибки.
Попробуйте следующую команду:
gcloud app ssl-certificates create --display-name example.com --certificate ./cloudflare-concat.crt --private-key cloudflare-pk.key
... выдает следующую ошибку:
ERROR: (gcloud.app.ssl-certificates.create)
INVALID_ARGUMENT: Invalid certificate.
`CertificateRawData` must contain a PEM encoded x.509 public key certificate, with header and footer included,
and an unencrypted PEM encoded RSA private key, with header and footer included and with size at most 2048 bits.
The requested private key and public certificate must match.
Любая помощь по загрузке действительного сертификата (от Cloudflare) и закрытого ключа в GCP высоко ценится.
Обновление 1
Я нашел этот (кэшированный) постраничный , описывающий все корневые и промежуточные сертификаты Cloudflare. Я попытался пару из них объединить мой сертификат домена, но пока не повезло. Также не ясно, какой использовать ...
Обновление 2
Я начинаю думать, что это никогда не сработает. Поскольку я использую «Сертификат происхождения» от Cloudflare, я считаю, что это самозаверяющий сертификат самого Cloudflare, а это означает, что App Engine никогда не признает его действительным.
Причина, по которой я так думаю, заключается в том, что я пытался использовать инструмент cfssl
из cloudflare для автоматического создания сертификата связки. Ответ, который я получаю от бега
cfssl bundle -cert domain.crt
Возвращает следующий результат:
[INFO] bundling certificate for {Country:[] Organization:[CloudFlare, Inc.] OrganizationalUnit:[CloudFlare Origin CA] Locality:[] Province:[] StreetAddress:[] PostalCode:[] SerialNumber: CommonName:CloudFlare Origin Certificate Names:[{Type:2.5.4.10 Value:CloudFlare, Inc.} {Type:2.5.4.11 Value:CloudFlare Origin CA} {Type:2.5.4.3 Value:CloudFlare Origin Certificate}] ExtraNames:[]}
{"code":1220,"message":"x509: certificate signed by unknown authority"}
Дополнительная информация
- Я использую бесплатную подписку Cloudflare.
- Все отлично работает при использовании «гибкой» настройки из Cloudflare,
- Но я бы хотел использовать «полный (строгий)» параметр