生成GCP兼容的Cloudflare SSL证书

xt0899hw  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(175)

我正在尝试为Google Cloud的App Engine配置SSL。您可以在GCP中上传自己的自定义SSL证书+私钥(参见screenshot)。
我正在使用Cloudflare的DNS,并希望在Cloudflare中使用“完全(严格)”SSL策略。这意味着我必须在GCP中添加由Cloudflare创建的证书和密钥(在同一个屏幕截图中)。
我已经成功地将私钥转换为GCP可以接受的有效(PEM)格式。唯一不起作用的是证书部分。
在GCP中同时输入证书和密钥时,点击上传后返回以下错误:

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

在谷歌上搜索了一下之后,我在GCP的文档中找到了以下资源,解释说我需要在证书字段中上传完整的 * 证书链 *。所以我尝试的下一件事,是从cloudflare concat 我的证书和cloudflare本身的根证书,正如GCP文档中所解释的那样。所以我运行以下命令来创建这个链:

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

......并将其上传到GCP的证书字段中。
这也不起作用,即使私钥和证书链的校验和匹配,正如GCP文档所解释的那样,通过运行:

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

......并比较MD5输出。
所以现在我完全没有想法了。GCP的错误消息仅限于上面的一个,还有一个说你的PK不是有效的格式。

通过CLI(gcloud)尝试同样的问题

当我们尝试通过gcloud执行此过程时,我们会得到相同的错误。尝试以下命令:

  1. gcloud app ssl-certificates create --display-name example.com --certificate ./cloudflare-concat.crt --private-key cloudflare-pk.key

.产生以下错误:

  1. ERROR: (gcloud.app.ssl-certificates.create)
  2. INVALID_ARGUMENT: Invalid certificate.
  3. `CertificateRawData` must contain a PEM encoded x.509 public key certificate, with header and footer included,
  4. and an unencrypted PEM encoded RSA private key, with header and footer included and with size at most 2048 bits.
  5. The requested private key and public certificate must match.

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

更新1

我发现这个(cached) paged描述了Cloudflare的所有根证书和中间证书。我已经尝试了一对夫妇,他们对我的域名证书连接,但没有运气到目前为止。也不清楚用哪一个...

更新2

我开始觉得这行不通了。因为我使用的是来自Cloudflare的“原始证书”,所以我相信这是来自Cloudflare本身的自签名证书,这意味着App Engine永远不会将其视为有效。
我认为是这样的原因,是因为我试图使用cloudflare的cfssl工具来自动“创建一个证书”。我从跑步中得到的React是

  1. cfssl bundle -cert domain.crt

返回以下结果:

  1. [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:[]}
  2. {"code":1220,"message":"x509: certificate signed by unknown authority"}

额外信息

  • 我正在使用免费的Cloudflare订阅。
  • 当使用Cloudflare的“灵活”设置时,一切都很好,
  • 但我想使用'完全(严格)'设置
pkmbmrz7

pkmbmrz71#

我最近发现了一个博客,描述了如何解决这个问题。在遵循所描述的步骤之后,证书在Google Cloud中被接受,并且在cloudflare中的“full(strict)ssl”选项下一切正常!
简而言之:它涉及到一些调整密钥,通过手动添加“RSA”,如博客文章中所述。
查看此链接:https://blog.woohoosvcs.com/2019/11/running-google-app-engine-behind-cloudflare/
编辑:这可能与@Andrei描述的使用shell命令的最终结果相同

zhte4eai

zhte4eai2#

请验证您使用的是免费Cloudflare帐户还是付费Cloudflare帐户。因为如果你是自由使用比我认为SSL严格是行不通的,使它灵活,并重定向所有HTTP请求到https请求。

jgzswidk

jgzswidk3#

简单地说:
你从cloudflare得到的是:

  1. -----BEGIN PRIVATE KEY-----
  2. wXYZ....
  3. -----END PRIVATE KEY-----

将其更改为:

  1. -----BEGIN RSA PRIVATE KEY-----
  2. wXYZ....
  3. -----END RSA PRIVATE KEY-----

Google App Engine也接受它。

相关问题