1
RqPS6rhmP3Nyn3Tm 2017-03-30 17:02:38 +08:00 via iPhone
把 Nginx 的 listen 443 ssl 删掉试试
|
3
RE 2017-03-30 17:15:24 +08:00 1
这逻辑为啥问题?
你的 B 站点未部署 SSL 却响应了 A 的 SSL ,那是你服务器配置的问题。 优先检测 HTTPS 协议是 CA 公司的检测,也不是阿里的检测,何况只是优先检测 HTTPS 而不是不检测 HTTP |
4
ovear 2017-03-30 17:37:50 +08:00
|
5
RE 2017-03-30 17:42:21 +08:00
|
7
kn007 2017-03-30 17:46:49 +08:00
这看起来没毛病啊。。符合逻辑。。。
|
8
ovear 2017-03-30 18:33:53 +08:00
@RE 你是不是没有搞清楚 端口和 Host 的区别。
对于一个 virtual host ,只要服务器上监听了 443 ,就会可以有响应。响应完毕之后( SSL 握手结束)才有所谓的 HOST 头( HTTP 协议) 阿里云这条规则肯定对应的 SNI 没有出现前,一个独立 IP 只能对应一个 SSL 证书。 那么请问一件事,谁规定了 a.a.com 一定要跟 b.b.com 两个 IP 放,我使用 SNI 的话,就不能避免在 http 服务器找不到对应的 vhost 的时候返回一个默认证书为了保证 443 正常回复数据。 我觉得你还不要忙着喷我,自己想一想自己说的话。如果有解决方法欢迎给出。 至于 A 网站和 B 网站分开两个 IP 放,这种话就不要说了。。 |
9
RE 2017-03-30 18:40:13 +08:00
@ovear 笑死我了,还能扯那么多,我自己的 VPS 就一个 IP 地址,十多个域名,七八个有 SSL ,其它的没有就响应 80 端口就行了,你真的搞懂 nginx / apache / iis 的配置了么???????
|
10
just1 2017-03-30 18:40:18 +08:00 via Android 1
明明是 443 端口 default_server 的问题。。。
|
11
RE 2017-03-30 18:47:58 +08:00
@ovear
真正要好好想想自己说的话的人是你,来,给你科普一下。 只要开放了 80 / 443 端口的访问,并且建立了 HTTP 服务,不管是基于 APACHE / NGINX 还是 IIS ,就有一个“默认网站”的概念,说的简单点,就是直接访问 IP 地址的时候,响应的网站。 如果你给 default 站点配置了 a.b.com 证书,那服务器上的其它站点只要是没有 SSL 的、却以 https 访问,就会响应 a.b.com 的证书,例如你访问了 b.b.com 而 b.b.com 却没配置自己的 SSL 同时又监听了 443 端口。 你要解决方案? 解决方案就是 default 不应该放任何网站。 既然你知道 virtual host 那就多建立一个 a.b.com 的站点配置,而 b.b.com 是另一个配置,以此类推。 ------ 反过来说,即便不是阿里云,即便不是 CA 的规则,也要确保用浏览器能正确访问,才是硬道理。如果你给 b.b.com 响应了 a.b.com 的证书,浏览器访问也照样出错。 |
12
ovear 2017-03-30 18:56:23 +08:00 5
@RE 年轻人脾气不要这么差,小心以后出去吃大亏。。
另外你还是仔细看下我下面说的内容吧,没准可以帮到你。 端口和协议所在的层级都不一样, 我顺便详细说明下吧,可能我的表达也不是很清楚 首先科普下上面为什么说 端口 和 协议 是不同层级。 首先,端口是承载信息传递的一个通道,而 协议 是传输信息的一个规范。 通俗点比喻就是,你用 QQ 跟别人聊天,双方用的是英语,还是法语还是中文。 QQ 就可以类比为端口,使用的语言就可以比喻成协议 对于一个 IP ,只要监听了端口,那么就可以传输数据,比如说之前 https://www.v2ex.com/t/348752 说的, 80 端口也可以传输非 HTTP 数据。 好了,前提结束。 我的假设是,服务器支持 SNI ,且已经有线上的业务、域名有有效证书,能提供正常的 HTTPS 服务,那么此时 443 端口是通的,且能正常服务的(标准 HTTPS 协议)。 那么对于原始 HTTPS 协议,也就是 HTTP over SSL/TLS ,此时的服务端是无脑返回设置的证书,也就是 a.a.com 的证书,此时不存在一个 IP 对应多个 HTTPS 证书。所以也就可以做到 @RE 所说的不监听 443 端口。 但是问题在于,现在 SNI 出现了,在 TLS 加密握手之前,会传输一个 common name ,也就是所谓的 host name 。然后服务端根据 host 来确定返回哪个证书。这时候, IP 和证书的关系就变成了 一对多 关系。 所以阿里的这个规则就有问题了,也就是 @just1 说的 default_server 的问题。 我们这个场景, a.a.com 是正常服务的,说明服务端已经监听了 443 端口。而此时通过 443 端口访问 b.b.com 的时候,服务端会因为找不到该 common name 对应的证书,从而返回默认证书。 这个根据不同的服务端不同,比如说 Apache2.0 时代是按照 Host name 排序,返回第一个 Host 。而 Apache2.2/2.4 Nginx 以及衍生发行版,则是采用载入配置的第一个 host 最为默认的 default server 。 所以这时候问题就产生了,因为服务器返回了一个不是 b.b.com 的有效证书(包括 common name 不匹配 和 证书不受信任)。 我想说的是这么个问题。 至于对于某位同学,我是觉得,如果有解决方法不妨分享出来,没必要搞针对攻击。大家都是在讨论这个问题而已。 |
13
ovear 2017-03-30 19:02:17 +08:00
@RE 麻烦参考上面回答下列问题
1 、 default server 是怎么决定的 2 、 HTTPS 、 HTTP 、 STL 之间的关系 3 、 HTTPS 的握手过程大概有几个步骤 4 、网站没有内容就能阻断 HTTPS 握手了么? |
14
rrfeng 2017-03-30 19:02:58 +08:00 2
看到这个讨论我想到一个问题:
server 段的 listen 443 其实是全局的,只要一个 virtual host 开启了 443 ,那么这个服务器就会响应 ssl 连接。 1. 不支持 SNI 的情况下,直接返回某个证书(不能判断域名) 2. 支持 SNI 的情况下,如果某个域名没有配置证书,那么也会返回另一个域名的证书 感觉无解 |
15
RE 2017-03-30 19:54:15 +08:00
|
16
RE 2017-03-30 19:57:08 +08:00
@ovear 这么说的话,如果 CA 只检测 https 的链接,证书不符也就不去检测 http 的,那逻辑确实有问题了。除非把域名临时指向一个没有配置任何证书的服务器上。
|
17
bin456789 2017-03-30 20:32:58 +08:00
看到各位的回答真是高端
不过我觉得这事很简单 就是 ca 模拟正常的浏览器下载那个文件,能下载而且文件内容也匹配就通过验证 不就这么简单? |
18
RE 2017-03-30 21:02:53 +08:00
@bin456789 问题在于 CA 首先访问的是 https 的地址,例如:
https://http://www.example.com/.wellknown/pki-validation/fileauth.txt 但一般情况下,要申请的域名是没有 SSL 证书的,所以上面这个地址并不能正确响应,如果用浏览器访问会提示证书错误。然后 CA 就认为是内容不符合,验证无法通过。 只能是关闭这台服务器的所有 443 端口, CA 发现 https 无法访问的时候才会去访问 http 的地址。 无法访问 ≠ 证书不正确。 |
20
bin456789 2017-03-30 21:44:47 +08:00
@RE
先套个 Let's Encrypt 之类的证书就行了嘛 或者换个验证方式,不是应该有 cname txt 之类的验证吗? 阿里云的规矩就只有 https 可信这一条 虽然这个规矩好像是有点问题,但是解决的方法有很多 但是又不愿先搞个 Let's Encrypt ,又不愿关闭 443 ,又不能动 dns ,这不是自己捉虫吗? |
21
yangqi 2017-03-30 22:00:05 +08:00
你 B 站还没 ssl 证书,就不应该开 https 端口,如果已有 https ,要保证 ssl 正确。规则都说的很清楚了,并没有问题啊。楼主真是有趣+尴尬
|
22
UnisandK 2017-03-30 22:48:32 +08:00
好像很多人没有意识到不是每个公司都是一个子域名一台服务器这么阔绰,也不是每一个公司配置 SSL 的人都刚好也管理着公司的域名,觉得把 443 关了就行的是真不怕被老板砍死
给 12 楼点个赞,有些同学带攻击性的性格该改改了 |
23
yangqi 2017-03-30 23:36:51 +08:00
@UnisandK 说这话的你们会不会配置服务器啊?多个域名一台服务器完全不是问题啊,本来就不应该出现访问一个域名而跳到另外一个不相关站点的情况啊,你们公司都没有运维的么?
|
25
vizards 2017-03-30 23:56:05 +08:00 via iPhone
在 AlphaSSL 申请免费泛域名证书的时候也遇到了这个问题...但是它还不像阿里云一样有提示,跟支持人员沟通了了十几封邮件,最后偶然把原来无效的证书撤了才明白过来...
|
26
hanqi7012 2017-03-31 00:24:45 +08:00 via Android
所以
你丫管我那么多 要不就直接优先 80 端口要不就别介意证书的合法性 去你家申请证书肯定是有需求的唉 |
27
smileawei OP @bin456789 这里只是讨论这个验证逻辑的不合理性,迂回的解决方案肯定是有,但是生产环境不适合暂停其它站 ssl 这个方案,先给 B 站点申请 LE 证书再申请阿里云提供的证书,我何不直接使用 LE 的证书。
|