生成GCP兼容的Cloudflare SSL证书

时间:2019-03-26 13:57:06

标签: google-app-engine ssl google-cloud-platform openssl cloudflare

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

我将Cloudflare用于DNS,并想在Cloudflare中使用“完全(严格)” SSL策略。这意味着我必须在GCP中添加Cloudflare创建的证书和密钥(在同一屏幕截图中)。

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

在GCP中输入证书和密钥时,单击“上传”后,将返回以下错误:

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

经过一番谷歌搜索,我发现了以下资源on GCP's documentation,解释了我需要在证书字段中上传完整的证书链。因此,我接下来尝试做的是,将我的cloudflare证书与cloudflare本身的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's。 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的“原始证书”,所以我认为这是Cloudflare本身的自签名证书,这意味着App Engine永远不会将其视为有效。

之所以如此,是因为我试图使用cloudflare中的cfssl工具来自动“创建捆绑包证书”。我从跑步中得到的回应

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的“灵活”设置时一切正常,
  • 但是我想使用“完全(严格)”设置

2 个答案:

答案 0 :(得分:0)

能否请您确认您正在使用免费的Cloudflare或付费的Cloudflare帐户。 因为如果您可以自由使用,那么我认为SSL strict不能正常工作,请灵活使用它,并将所有HTTP请求重定向到https请求。

答案 1 :(得分:0)

我发现了最近的一篇博文,描述了如何解决此问题。 按照说明的步骤操作后,该证书在Google Cloud中被接受,并且一切都对cloudflare中的“完全(严格)ssl”选项起作用!

简而言之:如博客文章所述,通过手动向其中添加“ RSA”来对密钥进行一些调整。

查看此链接: https://blog.woohoosvcs.com/2019/11/running-google-app-engine-behind-cloudflare/