现象
梯子不能上外网
debug过程
首先怀疑是不是域名被墙,443端口被封,这两点通过站长之家的端口扫描和ping可以确定
测试结果都是好的
这就很奇怪了,发生什么事了? 看日志
ssh上到搬瓦工,
1 | service trojan status |
查看服务状态,显示
1 | trojan SSL handshake failed: sslv3 alert bad certificate |
看起来像是ssl证书出了问题,用浏览器访问伪装的域名也显示不安全,而不是小绿锁
奇怪,我的证书是acme.sh脚本申请的,应该没问题吧。
那查查证书啥问题吧,到证书文件路径下,
1 | ls -al |
发现证书的创建时间是6月,现在是9月,会不会是证书过期了?
1 | cat domain.cert | openssl x509 -noout -enddate |
1 | // 输出 |
靠,刚好就是昨天过期的,看来原因找到了,ssl证书过期导致ssl握手失败。
这时候咋办?
1.客户端不对证书进行校验,直接连接,梯子正常工作,就是可能不太安全。(配置文件里
2.更新证书,让ssl正常握手
我选择后者。
到服务器目录下,
1 | acme.sh --renew www.example.com --debug |
尝试更新证书,发现失败了,原因是80端口被占用。
我靠,破案了,我这台服务器上有运行nginx在80端口,而当初acme申请证书的时候选择是standalone模式,
1 | acme.sh --issue -d mydomain.com --standalone |
即本地在80端口开启一个http服务进行验证申请证书。
而每次ctron脚本要去更新证书时,都会在80端口开启服务,结果因为80被nginx占了,所以自然开启失败,导致更新证书失败。
咋办? trojan的伪装要,还要自动更新证书。
哎,把nginx的端口改成了8080,trojan的fallback方案改为监听8080,那么80端口不久不被占用了? 这样申请证书脚本顺利跑,脚本能正常更新,trojan还能伪装,两全其美。