Free Arch【已解决】七牛云上传 Cloudflare 证书

哈德韦

共 3925字,需浏览 8分钟

 · 2022-05-15



【问题】在七牛云的证书管理页面,上传证书时,出现[400338] 获取父级证书失败,请稍后重试的报错。在小程序里查看本文


【详细描述】
通过实际测试发现,即使使用了 Cloudflare 对静态站点进行 CDN 加速,其文件下载速度在上海的电信网络里实测仍然非常慢。虽然是电信千兆光纤网,但是下载一个32兆的文件,仍然需要长达一个小时,无法忍受。你也可以打开这个页面,尝试下载页面上的 apk 文件试试。https://app.jeff-tian.jiwai.win/


推测 Cloudflare 的 CDN 结点在中国还是比较少,于是想起了七牛云,想使用七牛云的 CDN 文件分发功能。但是我在在 Cloudflare 的配置里对 jiwai.win 这个域名配置了 https,这个配置不能轻易改动,否则会影响其他的子域名,这带来的问题是,通过七牛云的 CDN 加速后,实际上如果使用 https:// 访问会报 PROTOCOL_MISMATCH 的错误,而通过 http:// 访问呢,那肯定也是不行的了。七牛云这时会自动 308 跳转到源站的 https 协议上,导致没有加速效果。所以,只能以 https 的形式来开通这个 CDN 加速,这时七牛云会要求选择一个 https 证书,要么购买,要么直接上传自有证书。购买是 Free Arch 不能接受的,不过七牛云很贴心地提供了一种免费的 DV 证书,这虽然免费,但仍然不能被 Free Arch 接受,有两个原因:1有个审核期,这就阻碍了 Free Arch 的自由这一层的含义,Free Arch 要求的是立刻马上生效;2DV 证书申请通过后,只有一年的有效期,这太烦了,每年都要再来一次,忍受这个审核期。



这时,我想到是要加速 Cloudflare,而 Cloudflare 生成的证书的有效期,可以最长 15 年。于是我想到直接上传 Cloudflare 的源站证书了。


这时碰到的问题是,生成的证书怎么也传不上去,会报[400338] 获取父级证书失败,请稍后重试这个错误信息。



【背景】如何获取 Cloudflare 源证书?我也忘了具体的做法,还好之前在薅 AWS lambda 的羊毛时,为了使用 Cloudflare CDN 加速 lambda,也是需要在 AWS 的 ACM 里上传 Cloudflare 证书的,当时写了一篇文章:《Free Arch:给 GraphQL 增加 CDN 缓存》,并宣称有极大的参考价值,没想到这次又可以复用一次,果真是有极大的参考价值呀。获取 Cloudflare 证书的步骤那篇文章里有,但这里再简单贴几个图,因为,Cloudflare 的界面已经修改了!




将以上的源证书和私钥拷贝好,粘贴到七牛云的自有证书上传页面:


点击上传,就碰到了[400338] 获取父级证书失败,请稍后重试这个错误。我还真的等了一会儿,再重试,仍然如此,无论怎么重试都没有用,于是明白了“请稍后重试”,就是废话!关键信息在获取父级证书失败这个我在上一篇文章中也是有经验的,当时在 AWS ACM 的证书上传时,碰到一个证书链的问题,这里说是父级证书的问题,虽然我不懂这些证书呀 https 呀,但是靠着技术直觉力,我觉得这是同一个问题。【如何获取 Cloudflare 的根证书】无论字面上说根证书、证书链、还是父证书,对我现在的具体问题来说,都是需要找到 Cloudflare 的根证书了。好在有这篇参考价值极大的文章《FreeArch:给 GraphQL 增加 CDN 缓存》,我很快找到了。顺便说一下,这篇文章里给到的 Cloudflare 文档的原始链接,已经是 404 了!而且我尝试在 Cloudflare 官方开发者文档里搜索了 Cloudflare root CA 等等关键词,再也找不到根证书的具体内容了!这种死链问题,真是比较坑爹。好在我的参考价值极大的文章里明文粘贴了 Cloudflare 的根证书内容,再一次派上了用场!由于非常有效,这里再粘贴一次:
-----BEGIN CERTIFICATE-----MIIEADCCAuigAwIBAgIID+rOSdTGfGcwDQYJKoZIhvcNAQELBQAwgYsxCzAJBgNVBAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTQwMgYDVQQLEytDbG91ZEZsYXJlIE9yaWdpbiBTU0wgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMB4XDTE5MDgyMzIxMDgwMFoXDTI5MDgxNTE3MDAwMFowgYsxCzAJBgNVBAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTQwMgYDVQQLEytDbG91ZEZsYXJlIE9yaWdpbiBTU0wgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwEiVZ/UoQpHmFsHvk5isBxRehukP8DG9JhFev3WZtG76WoTthvLJFRKFCHXmV6Z5/66Z4S09mgsUuFwvJzMnE6Ej6yIsYNCb9r9QORa8BdhrkNn6kdTly3mdnykbOomnwbUfLlExVgNdlP0XoRoeMwbQ4598foiHblO2B/LKuNfJzAMfS7oZe34b+vLByrP/1bgCSLdc1AxQc1AC0EsQQhgcyTJNgnG4va1c7ogPlwKyhbDyZ4e59N5lbYPJSmXI/cAe3jXj1FBLJZkwnoDKe0v13xeF+nF32smSH0qB7aJX2tBMW4TWtFPmzs5IlwrFSySWAdwYdgxw180yKU0dvwIDAQABo2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUJOhTV118NECHqeuU27rhFnj8KaQwHwYDVR0jBBgwFoAUJOhTV118NECHqeuU27rhFnj8KaQwDQYJKoZIhvcNAQELBQADggEBAHwOf9Ur1l0Ar5vFE6PNrZWrDfQIMyEfdgSKofCdTckbqXNTiXdgbHs+TWoQwAB0pfJDAHJDXOTCWRyTeXOseeOi5Btj5CnEuw3P0oXqdqevM1/+uWp0CM35zgZ8VD4aITxity0djzE6Qnx3Syzz+ZkoBgTnNum7d9A66/V636x4vTeqbZFBr9erJzgzhhurjcoacvRNhnjtDRM0dPeiCJ50CP3wEYuvUzDHUaowOsnLCjQIkWbR7Ni6KEIkMOz2U0OBSif3FTkhCgZWQKOOLo1P42jHC3ssUZAtVNXrCk3fw9/E15k8NPkBazZ60iykLhH1trywrKRMVw67F44IE8Y=-----END CERTIFICATE-----

而且,我的参考价值极大的文章还贴心地写了应该如何将这个根证书与上一次生成的服务器源证书拼接在一起,以成功地上传至 AWS ACM。但是这一次,我照做了,结果还是[400338] 获取父级证书失败,请稍后重试这个错误!这就百思不得其解了……在这里卡了一秒,立即再次用技术直觉力,猜测,难道这个证书链并没有通用的标准顺序?各大厂商(程序员)自行随意实现的?而且都有一个通病,就是界面上不给个提示,文档也没有,只能靠用户去猜?既然猜到这里,我立即调换了一根证书和源证书的顺序,再试了一次上传,真的成功了!这里再贴一下,对于七牛云的证书上传页面,应该用下面的顺序,和 AWS ACM 的证书上传页面,顺序正好相反。当然你也举一反三,以后在别的什么厂商的证书上传页面,上传碰到错误,千万不要无脑重试,而是需要换一换顺序再试:
-----BEGIN CERTIFICATE-----源服务器证书内容-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----Cloudflare 根证书内容-----END CERTIFICATE-----


【总结】至此在七牛云的证书管理页面上传 Cloudflare 证书的问题已经完美解决,再总结一下解决方法:1获取 Cloudflare 根证书2生成源服务器证书3将证书内容拼接起来,注意将根证书内容放在后面最后,在《Free Arch:给 GraphQL 增加 CDN 缓存》里有抱怨 AWS 报证书链的错误时,在 AWS 文档里没有找到任何证书链相关的文档。这次在七牛云的文档里,却找到了证书链的相关说明,虽然很简短,但是写得比较清楚,有兴趣的同学可以看一看:
https://developer.qiniu.com/fusion/kb/3703/the-certificate-chain-is-what





若有收获,就点个赞吧



浏览 100
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报