生成 GCP 兼容的 Cloudflare SSL 证书

Generating GCP compatible Cloudflare SSL certificate

我正在尝试为 Google Cloud 的 App Engine 配置 SSL。 您可以在 GCP 中上传您自己的自定义 SSL 证书 + 私钥(参见 screenshot)。

我将 Cloudflare 用于 DNS,并希望在 Cloudflare 中使用 "Full (strict)" SSL 策略。这意味着我必须在 GCP 中添加由 Cloudflare 创建的证书和密钥(在同一屏幕截图中)。

我已成功将私钥转换为 GCP 可接受的有效 (PEM) 格式。唯一不起作用的是证书部分。

在 GCP 中同时输入证书和密钥时,点击上传时,返回以下错误:

The certificate data is invalid. Please ensure that the private key and public certificate match.

经过一些谷歌搜索,我发现了 cloudflare 本身的以下资源 on GCP's documentation, explaining I need a have the full certificate-chain uploaded in the certificate field. So next thing I tried, is to concat my certificate from cloudflare together with the root certificate,如 GCP 文档中所述。 所以我 运行 下面的命令来创建这个链:

cat domain.crt cloudflare-root-ca.crt > concat.crt

...并在 GCP 的证书字段中上传了那个。

即使私钥和证书链的校验和匹配为 explained by GCP docs,这也不起作用,作者 运行:

openssl x509 -noout -modulus -in concat.crt | openssl md5
openssl rsa -noout -modulus -in myserver.key.pem | openssl md5

...并比较 md5 输出。

所以现在我完全没有Idea了。 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.

非常感谢任何有关在 GCP 中上传有效证书(来自 Cloudflare)和私钥的帮助。

更新 1

我发现这个 (cached) paged 描述了 Cloudflare 的所有根证书和中间证书。我已经尝试了其中的几个来再次连接我的域证书,但到目前为止还没有成功。也不清楚该用哪个...

更新 2

我开始认为这永远行不通。因为我使用的是来自 Cloudflare 的 'Origin Certificate',我相信这是来自 Cloudflare 本身的自签名证书,这意味着 App Engine 永远不会将其识别为有效。

我认为是这种情况的原因是因为我尝试使用从 cloudflare 到 'create a bundle-cert' 的 cfssl 工具自动。我从 运行

得到的回应
cfssl bundle -cert domain.crt

Returns 结果如下:

[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 帐户。 因为如果您可以自由使用,我认为 SSL strict 将无法正常工作,使其灵活并将所有 HTTP 请求重定向到 https 请求。

我最近发现了一篇博文,描述了如何解决这个问题。 按照描述的步骤操作后,证书在 Google Cloud 中被接受,并且 cloudflare 中的 'full (strict) ssl' 选项一切正常!

简而言之:它涉及一些按键调整,通过手动添加 'RSA' 到它,如博文中所述。

看到这个link: https://blog.woohoosvcs.com/2019/11/running-google-app-engine-behind-cloudflare/

编辑: 这可能与使用 @Andrei

描述的 shell 命令的最终结果相同