基于 TLS 的 WebSocket:Golang / Gorilla
WebSocket over TLS: Golang / Gorilla
我一直在尝试通过 TLS 建立 WebSocket 连接(因此加密)。我将 Golang 与大猩猩一起使用。 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框架中设置?
解决此问题的一种方法是使用 certbot 设置反向代理(如 nginx)来生成证书。
这是它的工作原理
[ Client ] ----------> [ nginx ] --------------> [ golang server ]
Encrypted Not encrypted
使用http.ListenAndServeTLS加密用于HTTP协议和WebSocket协议的底层网络连接。
该方法保护底层网络连接上的整个通信,包括所有 WebSocket 流量。
Gorilla 服务器代码使用 net/http 服务器提供的网络连接。 Gorilla 服务器代码确实创建了新的网络连接。
http.ListenAndServeTLS 是调用低级函数和方法的辅助函数。也可以直接调用那些底层的函数和方法。
我一直在尝试通过 TLS 建立 WebSocket 连接(因此加密)。我将 Golang 与大猩猩一起使用。 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框架中设置?
解决此问题的一种方法是使用 certbot 设置反向代理(如 nginx)来生成证书。
这是它的工作原理
[ Client ] ----------> [ nginx ] --------------> [ golang server ]
Encrypted Not encrypted
使用http.ListenAndServeTLS加密用于HTTP协议和WebSocket协议的底层网络连接。
该方法保护底层网络连接上的整个通信,包括所有 WebSocket 流量。
Gorilla 服务器代码使用 net/http 服务器提供的网络连接。 Gorilla 服务器代码确实创建了新的网络连接。
http.ListenAndServeTLS 是调用低级函数和方法的辅助函数。也可以直接调用那些底层的函数和方法。