我一直在尝试通过TLS建立一个WebSocket连接(所以使用加密)。我把Golang和Gorilla一起使用。WebSocket连接被实现为初始的HTTP连接,该连接被升级为WebSocket协议连接。代码如下:
func wsEndpoint(w http.ResponseWriter, r *http.Request) {
// upgrade
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
//...
}
log.Println("Client Connected")
err = ws.WriteMessage(1, []byte("Hi Client!"))
if err != nil {
//...
}
// listen indefinitely for new messages coming
}然后我们设置路由:
func main() {
//...
setupRoutes()
log.Fatal(http.ListenAndServe(":8080", nil))
}将最后一行更改为:
...http.ListenAndServeTLS(...)因此,换句话说,使用TLS来建立第一个连接?这种方法是否足以保护WebSocket上从头到尾的整个通信?我是否应该确保连接持续时间内的所有数据包传输也受到TLS的保护?如果没有,如何在Golang / Gorilla框架中设置它?
发布于 2020-04-20 22:36:06
使用http.ListenAndServeTLS对用于HTTP协议和WebSocket协议的底层网络连接进行加密。
该方法保护底层网络连接上的整个通信,包括所有WebSocket流量。
Gorilla服务器代码使用net/http服务器提供的网络连接。Gorilla服务器代码确实创建了新的网络连接。
http.ListenAndServeTLS是一个辅助函数,它调用较低级别的函数和方法。它还可以直接调用那些较低级别的函数和方法。
发布于 2020-04-20 22:34:23
解决这个问题的一种方法是设置一个反向代理,比如使用certbot的nginx来生成证书。
下面是它的工作原理
[ Client ] ----------> [ nginx ] --------------> [ golang server ]
Encrypted Not encryptedhttps://stackoverflow.com/questions/61324875
复制相似问题