![]() | 1 also24 2017-11-15 23:04:06 +08:00 ![]() |
![]() | 2 Lentin 2017-11-15 23:04:15 +08:00 sniproxy |
![]() | 3 ryd994 2017-11-15 23:09:37 +08:00 via Android ![]() |
![]() | 4 ewBuyVmLZMZE 2017-11-15 23:15:35 +08:00 via iPhone 这块涉及到 Openresty,ssl_certificated_By_lua |
![]() | 5 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 密钥 /证书 。 |
![]() | 6 Lentin 2017-11-15 23:29:46 +08:00 ![]() ![]() 看看证书大体就知道了吧…… |
![]() | 10 LanFomalhaut 2017-11-15 23:33:52 +08:00 ![]() 那么 cf 是如何甄别不同域名的连接的呢?是通过 TLS handshake 的证书获取域名等信息? [SNI] 之后的转发又如何实现的呢? 访客-(HTTPS)-节点(为节点上的证书 节点自然可以解密请求的数据) - 源服务器(是否开启 SSL 均不影响) |
![]() | 11 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 还提供使用客户证书的功能,但是需要付费。 |
![]() | 14 feast OP |
![]() | 16 Lentin 2017-11-15 23:47:50 +08:00 ![]() 如图 ![]() |
![]() | 18 dndx 2017-11-16 04:22:43 +08:00 CF 不支持 TLS 的透明代理。 |