cloudflare 是如何转发 HTTPS 流量的?

2017-11-15 23:00:06 +08:00
 feast
众所周知,HTTPS 流量对观察者来说是完全加密的内容,那么 cf 是如何甄别不同域名的连接的呢?是通过 TLS handshake 的证书获取域名等信息?之后的转发又如何实现的呢?客户端肯定不会额外支持 HTTP CONNECT 形成的隧道,而且 cf 也采用的不支持 connect 操作的 nginx 进行反向代理
6744 次点击
所在节点    程序员
19 条回复
also24
2017-11-15 23:04:06 +08:00
Lentin
2017-11-15 23:04:15 +08:00
sniproxy
ryd994
2017-11-15 23:09:37 +08:00
@also24
@Lentin
想多了
cloudflare 是 CDN,必须 mitm 破 TLS 才行
企业用户也有 keyless 的,只给协商后的对称参数,不给原始私钥,但 cloudflare 还是破了 TLS 的

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

我感觉你在描述的是:

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


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

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

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


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

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

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

另外 cloudflare 还提供使用客户证书的功能,但是需要付费。
feast
2017-11-15 23:36:49 +08:00
@ryd994 MITM 这个问题,假设我用的证书不是这个域名的呢
feast
2017-11-15 23:38:44 +08:00
@wql 还是有点感觉不太像 SNI 哈哈,只能另外想办法证明一下
feast
2017-11-15 23:44:22 +08:00
@also24 其实简单说 就是 1 cf 的节点是否是 https 透明代理,
2 https 数据加密,哪儿能看到域名
就这么多,感觉对 HTTPS 了解太少了,最近得恶补一下相关知识 Orz
Lentin
2017-11-15 23:46:31 +08:00
@feast https 证书里的域名是明文的,只不过看不到 uri 跟内容而已……
Lentin
2017-11-15 23:47:50 +08:00
如图
wql
2017-11-16 00:12:36 +08:00
@feast 如果是透明代理,就不要大费周章去签一个证书出来了。说白了,这只能是反向代理了……
dndx
2017-11-16 04:22:43 +08:00
CF 不支持 TLS 的透明代理。
msg7086
2017-11-16 06:03:29 +08:00
#12 @feast 你用的证书是什么并不重要。cloudflare 管辖你的域名,所以他可以为你申请任意证书。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/406759

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX