cloudflare 是如何转发 HTTPS 流量的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
feast
V2EX    程序员

cloudflare 是如何转发 HTTPS 流量的?

  •  
  •   feast 2017-11-15 23:00:06 +08:00 via Android 7075 次点击
    这是一个创建于 2886 天前的主题,其中的信息可能已经有所发展或是发生改变。
    众所周知,HTTPS 流量对观察者来说是完全加密的内容,那么 cf 是如何甄别不同域名的连接的呢?是通过 TLS handshake 的证书获取域名等信息?之后的转发又如何实现的呢?客户端肯定不会额外支持 HTTP CONNECT 形成的隧道,而且 cf 也采用的不支持 connect 操作的 nginx 进行反向代理
    19 条回复    2017-11-16 06:03:29 +08:00
    Lentin
        2
    Lentin  
       2017-11-15 23:04:15 +08:00
    sniproxy
    ryd994
        3
    ryd994  
       2017-11-15 23:09:37 +08:00 via Android   1
    @also24
    @Lentin
    想多了
    cloudflare 是 CDN,必须 mitm 破 TLS 才行
    企业用户也有 keyless 的,只给协商后的对称参数,不给原始私钥,但 cloudflare 还是破了 TLS 的

    怎么 mitm ? cloudflare 有你域名的 DNS 管理权限,利用这个权限找证书商签就行。普通用户给多域名。加钱单域名。
    ewBuyVmLZMZE
        4
    ewBuyVmLZMZE  
       2017-11-15 23:15:35 +08:00 via iPhone
    这块涉及到 Openresty,ssl_certificated_By_lua
    also24
        5
    also24  
       2017-11-15 23:28:02 +08:00   1
    @ryd994 #3
    不确定是楼主描述问题还是别的地方出了差错……

    我感觉你在描述的是:

    CDN-浏览器 间之所以能在不持有源站的 https 证书的情况下,就建立起 https 连接。
    是因为 Cloudflare 持有相应域名的管理权( or cname 这种变相管理权),于是 Cloudflare 可以申请到相应的 DV 证书,从而建立连接。


    而我和 @Lentin #2 说的 SNI 所解决的问题是:

    在 Cloudflare 的同一台 CDN 节点上,可能同时有多个客户的域名指向这台机器。
    那么机器上的 “ CDN 程序” 是如何在 TLS 握手之前,就判断出丢给自己的请求,是针对哪个域名,从而选择相应的 TLS 密钥 /证书 。
    Lentin
        6
    Lentin  
       2017-11-15 23:29:46 +08:00   1

    看看证书大体就知道了吧……
    feast
        7
    feast  
    OP
       2017-11-15 23:30:56 +08:00 via Android
    @also24 不大可能是 SNI,因为 SNI 可以透传 SSL V 破 N
    feast
        8
    feast  
    OP
       2017-11-15 23:31:20 +08:00 via Android
    @Lentin 恐怕没这么简单
    wql
        9
    wql  
       2017-11-15 23:33:25 +08:00 via Android
    @feast 根据官方描述就是这么简单
    LanFomalhaut
        10
    LanFomalhaut  
       2017-11-15 23:33:52 +08:00   1
    那么 cf 是如何甄别不同域名的连接的呢?是通过 TLS handshake 的证书获取域名等信息?
    [SNI]


    之后的转发又如何实现的呢?
    访客-(HTTPS)-节点(为节点上的证书 节点自然可以解密请求的数据) - 源服务器(是否开启 SSL 均不影响)
    gamexg
        11
    gamexg  
       2017-11-15 23:34:57 +08:00   1
    https://blog.cloudflare.com/introducing-universal-ssl/

    > 那么 cf 是如何甄别不同域名的连接的呢?是通过 TLS handshake 的证书获取域名等信息?
    是的, 排除 windows xp+ie/chrome 之外的环境都支持 SNI,ssl 握手包内包含了域名,cf 可以直接得到。

    > 之后如何进行的?
    cloudflare 给每个网站签发了 ssl 证书,然后直接用自己的证书回应浏览器即可。网站服务器本身有没有 ssl 只是影响 cf 回源时是否使用 https。

    另外 cloudflare 还提供使用客户证书的功能,但是需要付费。
    feast
        12
    feast  
    OP
       2017-11-15 23:36:49 +08:00 via Android
    @ryd994 MITM 这个问题,假设我用的证书不是这个域名的呢
    feast
        13
    feast  
    OP
       2017-11-15 23:38:44 +08:00 via Android
    @wql 还是有点感觉不太像 SNI 哈哈,只能另外想办法证明一下
    feast
        14
    feast  
    OP
       2017-11-15 23:44:22 +08:00 via Android
    @also24 其实简单说 就是 1 cf 的节点是否是 https 透明代理,
    2 https 数据加密,哪儿能看到域名
    就这么多,感觉对 HTTPS 了解太少了,最近得恶补一下相关知识 Orz
    Lentin
        15
    Lentin  
       2017-11-15 23:46:31 +08:00
    @feast https 证书里的域名是明文的,只不过看不到 uri 跟内容而已……
    Lentin
        16
    Lentin  
       2017-11-15 23:47:50 +08:00   1
    如图
    wql
        17
    wql  
       2017-11-16 00:12:36 +08:00 via Android
    @feast 如果是透明代理,就不要大费周章去签一个证书出来了。说白了,这只能是反向代理了……
    dndx
        18
    dndx  
       2017-11-16 04:22:43 +08:00
    CF 不支持 TLS 的透明代理。
    msg7086
        19
    msg7086  
       2017-11-16 06:03:29 +08:00
    #12 @feast 你用的证书是什么并不重要。cloudflare 管辖你的域名,所以他可以为你申请任意证书。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6085 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 06:17 PVG 14:17 LAX 23:17 JFK 02:17
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86