waylybaye / HyperApp-Guide

HyperApp user's manual
1.56k stars 325 forks source link

通过 Nginx 为网站生成 SSL 证书后无法正常访问 #248

Open minimAluminiumalism opened 6 years ago

minimAluminiumalism commented 6 years ago

近期一直困惑我的问题:利用 HyperApp 中的 Nginx Proxy 和 Ngnix SSL Support 为域名添加 SSL 证书后,网站无法正常访问(域名可以 ping 通,也可以正常解析出目标 IP)。

1.一开始以为是 GFW 阻断了连接,但是尝试了 4 个域名和两个不同 IP(墙内可以正常访问)之后,发现一直是同样的情况,一旦 SSL 证书添加后就无法访问。网络为西安联通宽带; 2.但是同时又有一个非常奇怪的现象,当开启全局代理(如 ShadowsocksR 的 Global Mode)或者更换到电信宽带或者移动 4G 网络下,网站又可以进入,从这一点表现来看很像是典型的 GFW 干扰,但是结合第一点提到的不同域名不同 IP 都不正常,就想不明白; 3.后来我偶然用 Wireshark 对目标域名连接过程抓包,发现本地到目标域名之间通信一直停留在 Client Hello 状态,也就是说 TLS 握手的第一阶段都没有完成,我对这方面了解并不多,但据我所知,如果是 GFW 的阻断应该作用在第二次握手时,所以我猜想问题还是出在生成 SSL 证书本身。 4.浏览器(Chrome、FireFox)的报错一般都是 SSL 握手时间(正在建立安全连接)过长无法建立连接。

waylybaye commented 6 years ago

也有可能是运营商搞鬼啊… 移动宽带的幺蛾子好像很多…可以用 curl -v https:// 看下请求过程,方便的话可以贴出来

minimAluminiumalism commented 6 years ago

image 跟 Wireshark 抓包的结果一致,一直停留在 Client Hello 阶段直到超时关闭连接。

waylybaye commented 6 years ago

我使用代理时遇到过这种情况,有些代理对 TLS 支持不是太好,你可以用国外主机 curl 一下 https 试试,如果国外网络没问题,那么应该是防火墙,运营商或者挂的代理有问题。

zakiso commented 6 years ago

跟你同样的问题,请问老哥解决了吗?

chris-ss commented 5 years ago

同样的问题,解决了吗?

minimAluminiumalism commented 5 years ago

其实我两个月前就大概知道原因了,问题其实不在 Let's Encrypt 的免费域名证书本身,还是运营商的责任。我偶然一次在 V2EX 上看到了一个讨论贴,说部分地区运营商会干扰使用 Let's Encrypt 证书授权的域名连接,我突然想起来了自己其实就是同样的问题。暑假期间我回到安徽使用移动宽带,之前的问题就不存在了。所以要解决这个问题,要么换证书,要么换网络环境。

waylybaye commented 5 years ago

确实可能是这个原因… 但我发现好像只有国外VPS会卡在 Client Hello,国内的用LE证书没有问题。最近好像情况好了一些。

waylybaye commented 5 years ago

我想了解一下其它情况,出问题的都是阿里云国际版嘛?我目前得到明确反馈的都是用的阿里云…… @gitcue @chris-ss @zakiso

fengmk2 commented 5 years ago

部分地区运营商会干扰使用 Let's Encrypt 证书授权的域名连接

终于找到原因。。。

fengmk2 commented 5 years ago

@waylybaye 我是阿里云新加坡机房。

chris-ss commented 5 years ago

@waylybaye 我是阿里云美国,运营商南昌电信 比较神奇的是,我公司和家里同样是南昌电信,公司有这个问题,家里的却没有

waylybaye commented 5 years ago

@chris-ss 商宽和家宽可能路由不一样。

目前来看好像真的只有阿里云有这个问题…

fengmk2 commented 5 years ago

@chris-ss 我的更加奇怪,在公司网络,我电脑没问题,旁边同事电脑打开有问题。然后过几天,调转过来。。

minimAluminiumalism commented 5 years ago

@waylybaye 并非如此,我不使用海外阿里云。我分别在 DigitalOcean 纽约机房和 Vultr 迈阿密机房的两台 VPS 上测试过,两台 VPS 上绑定域名先后使用了由 Freenom 提供的免费域名和 Godaddy 的付费 .com 域名,但是同样的问题依然存在,只有当切换网络环境时问题会自动消失。但是还有一个很奇怪的现象,就是当你处在相同的网络环境下,白天连不上,夜里又能打开了,第二天白天又连不上...如此循环。就好像干扰是分时间段进行的。

chris-ss commented 5 years ago

你们有没有用路由用的梅林的? 有的话试试把koolproxy 卸载了! 我卸载了立马能打开了!!! Koolproxy 去广告导致的...

waylybaye commented 5 years ago

@gitcue 这个确实有点奇怪,我最近遇到了自己的网站打不开,但是第二天又好了。所以我现在也很怀疑到底是运营商搞的问题还是墙的问题…

@chris-ss 我根本没安装这个插件…

bengle commented 5 years ago

我用的阿里云香港,没想到也是这样。。。有没有办法解决?确定不是赛门铁克免费证书的问题?

Guofeng-Lin commented 5 years ago

问题类似,主机用的vultr,用阿里云申请的.cn域名,一旦安装Let's Encrypt的免费证书就连不上

waylybaye commented 5 years ago

这个很迷,阿里云的海外机房是重灾区,其它主机商好像遇到的比较少,也可能是因为建站的用阿里云的比较多。

minimAluminiumalism commented 5 years ago

@waylybaye 我认为根本上还是 GFW 的问题,GFW 大部分挂靠在运营商的基建下,针对特定 SSL(TLS)证书的封锁本身就是 GFW 的方式之一。

jiuqianyuan commented 5 years ago

freenom域名、Let's Encrypt证书、vultr主机、本地移动4G也不时存在tls干扰

jiuqianyuan commented 5 years ago

题主用的是什么域名,tls握手的server hello包也没收到,如果是针对证书的,那应该是第三个包Certificate收不到吧

minimAluminiumalism commented 5 years ago

.tk .com .ml 域名都尝试过,应该不是域名问题。

sophister commented 5 years ago

大神们解决了么,我用的 vultr 洛杉矶机房,也是 lets encrypt免费证书,偶尔能访问https,偶尔不能访问。本地抓包,也是在 client hello之后就卡住了;在服务器上抓包,发现服务器在 收到 client hello 之后,立即发了一个 FIN/ACK 的包,试图关闭server端链接。但是,我本地居然要过很久才会收到这个 FIN/ACK 包,导致在这期间,本地一直在重新发包。实在不知道是啥情况了

jiuqianyuan commented 5 years ago

.tk .com .ml 域名都尝试过,应该不是域名问题。

那要么就是机房的问题了,我用trustasia的证书一样被阻断,我是手机端,估计移动阻断vultr机房

sophister commented 5 years ago

应该是 GFW 的干扰导致的,在 clientHello中,包含 SNI 字段的话,我这的现象是,GWF随机性的丢包,导致客户端报超时。用 openssl s_client connect去连接相同的https域名,默认不会包含 SNI,就不会有问题

zhangzhanqicixi commented 5 years ago

我和你一模一样的问题,总是早上好,晚上又不行了。。。然后切到全局代理,就可以正常访问了,一度以为是 nginx 的问题,配了一天的 nginx conf ,刚刚才找到你这个帖子。。表示很崩溃。。按照博主你的分析,是否只能换收费的证书,或者直接把站切到国内?

qduyang commented 5 years ago

GFW,应该是备案的问题,国内主机没有备案就会这样