最近开发转用golang语言,所以经常在晚上搜资料,结果发现go语言中文网,我居然访问不了,刚开始以为是跟go有关,所以被防火长城屏蔽了,结果,偶尔讨论发现办公室的其他两个同事都可以访问,真是奇了怪了。
下面记录一下分析问题的过程:
chrome浏览器中的显示:
![](https://images2017.cnblogs.com/blog/483444/201801/483444-20180123162131006-442099100.png)
wireshark中抓包的结果:
![](https://images2017.cnblogs.com/blog/483444/201801/483444-20180123162154319-1994139238.png)
抓包显示在TLS握手阶段,在客户端发送了client hello之后,服务器返回了一个protocol version错误。
下面记录我自己的分析:
按照我的理解,访问https网站时是这样的:
1、客户端发请求给服务器。
2、服务器返回自己的证书给客户端。
3、客户端验证证书的是否OK,然后用公钥加密协商信息发送给服务器。
4、服务器收到后用私钥解密协商信息,协商成功。
然后,客户端和服务器就愉快用协商的加密算法进行通信了。
但是这个流程中为什么会出现服务器返回protocol version错误呢???还得去查HTTPS的资料,搞清楚到底是不是上面自己理解的那个流程。
终于把问题找到了,果然是chrome浏览器的问题,使用版本号错了。
下面是用火狐浏览器可以正常访问时抓的包:
![](https://images2017.cnblogs.com/blog/483444/201801/483444-20180123162227678-1612745682.png)
这里出现了新问题的,按道理不应该因为这个版本号导致访问不了啊,如果TLS1.0服务器不支持,客户端应该尝试其他版本啊,怎么会访问不了呢???这么奇葩