代码之家  ›  专栏  ›  技术社区  ›  Yan

我是否应该与CloudFlare共享我网站的SSL私钥以使用其CDN服务?

  •  -1
  • Yan  · 技术社区  · 5 月前

    假设我已经托管了一个https网站。SSL证书来自Let's Encrypt之类的东西。

    如果我想使用CloudFlare的CDN服务,我应该与它共享我的SSL私钥吗?例如,我希望CloudFlare缓存我网站的索引页面,这样用户对索引页面的请求就不会一次又一次地转到我的源服务器。相反,CloudFlare(充当中间人)将直接向他们提供页面。

    但是,如果CloudFlare不知道我的SSL私钥,它就无法解密HTTPS流量(其中包含用户请求的页面URL等信息),因此它实际上不知道用户请求的是什么。

    那么,CloudFlare是如何像魔术一样充当中间人的呢?你不可能真的应该与它共享你的SSL私钥,对吧?因为如果你这样做,你基本上相信CloudFlare不会做坏事(比如提供修改后的页面)。CloudFlare基本上可以代表您的网站做任何事情。这听起来很危险。


    编辑:如果实际上有2个SSL连接(一个在用户和CF之间,另一个在CF和源服务器之间),CF如何获得颁发给我网站的证书?例如,我的网站是 https://www.abcabc.com 。用户在浏览器中键入URL并点击Enter后,浏览器将从CF获取证书,并开始与CF进行SSL握手。但是,等等,CF如何拥有颁发给的证书 www.abcabc.com 还是*.abcabc.com?

    1 回复  |  直到 5 月前
        1
  •  2
  •   Martheen    5 月前

    我应该与它共享我的SSL私钥吗

    你不必,虽然你 能够 如果你愿意,与他们 Custom Certificates ,但它非常昂贵,只适用于企业用户或任何不能接受第三方证书的用例。

    如果CloudFlare不知道我的SSL私钥,它就无法解密HTTPS流量

    Cloudflare不需要关心您的源服务器私钥(除非您使用自定义证书功能),因为您的访问者使用Cloudflare的证书连接到Cloudflare。

    CloudFlare如何像魔术一样充当中间人

    一旦您验证了您的域名所有权,Cloudflare将通过LetsEncrypt或其他合作伙伴为您的域名生成证书。Cloudflare有权这样做,因为CA会看到您的域名NS记录现在确实指向Cloudflare的名称服务器。在服务器上运行的certbot通过挑战后,Let's Encrypt将如何向您颁发证书,这是类似的(尽管规模更大)。

    因此,现在Cloudflare可以处理您的访问者与其服务器之间的TLS连接,解密并检查它,然后使用您的源服务器证书重新加密。有趣的事实是,除非您使用 Full Strict 模式下,源服务器不需要为域提供有效的、公开可信的证书(如果使用关闭模式,甚至不需要任何加密)。这通常适用于传统情况,即源服务器无法使用来自公共CA的有效证书,但我在Cloudflare上看到很多域名指向谷歌DNS IP,这反过来又使它们成为HTTPS上的DNS端点,可能是为了逃避审查。这个技巧之所以有效,是因为虽然通常大多数源服务器会拒绝具有无效SNI的请求,但谷歌DNS DoH端点很乐意接受任何SNI。

    基本上相信CloudFlare不会做坏事

    无论自定义证书和TLS模式如何,如果您使用它们,您始终必须信任Cloudflare,因为它们可以随时为您的域生成证书,并且由于您的域指向其IP,因此它将受到信任。

    听起来有风险

    这就是大多数DDoS保护的工作原理:他们必须处理您的流量,从而完全控制它。即使是CA本身本质上也是一个信任链。