将会在 config 文件夹中生成 ca.key 和 ca.crt 文件
将会在 config 文件夹中生成 server.key 、 server.csr 和 server.crt 文件
签名方式: SHA-256 ,默认的 SHA-1 签名算法安全性不够高,Go 中会出现警告。
将会在 config 文件夹中生成 client.key 、 client.csr 和 client.crt 文件
签名方式: SHA-256 ,默认的 SHA-1 签名算法安全性不够高,Go 中会出现警告。
wireshark 截图如下:
在写websocket包的时候发现一个比较有趣问题!go 使用 TLS验证的时候发现 websocket 使用不了。深入了解发现其中奥秘:go 在执行 TLS 验证时候默认是使用 http2 协议进行的!但是 websocket 是无法支持 http2 协议(暂时),导致这个问题所在的原因!
使用空 map 来使用 http1.x协议
因为默认支持h2,所有我们把降到http1.x。
使用 http.Hijacker 对其进行劫持 net.Conn , 让程序员自己控制使用!其实这个时候已经脱离 http 协议规范!
发现使用 Hijacker 会脱离 http 协议范畴,可以解决h2与websocket的相关问题!
协议: 状态码:101 , Upgrade , Connection, Sec-WebSocket-Accept
实现最简单 websocket 连接!
websocket连接已经建立,有些 sec 是默认添加上去!
根据 http.Listen 进行向下追踪
在 func (srv *Server) Serve(l net.Listener) error 发现原由
对 c.setState 进入分析
发现当 case 是 Hijack【StateHijacked, StateClosed】状态时候执行 trackConn
add 为 false ,对其 delete(s.activeConn,c) 。Hijacker是满足相关条件
所以在 go c.serve(connCtx) 里面不在给 Hijacker 进行操作!导致 http header 无法设置!最后交给程序员自己操作!
go中自带的rpc可以直接复用http server处理请求的那一套流程去创建连接,连接创建完毕后再使用Hijack方法拿到连接。
注: github.com/gorilla/websocket
这包就接入 HIjacker ,直接使用现成包就香~~~~~