基于 TLS 的 WebSocket:Golang / Gorilla

use*_*600 2 ssl https go websocket gorilla

我一直在尝试通过 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 
}
Run Code Online (Sandbox Code Playgroud)

然后我们设置路由:

func main() {
    //...
    setupRoutes()
    log.Fatal(http.ListenAndServe(":8080", nil))
}
Run Code Online (Sandbox Code Playgroud)

将最后一行更改为:

...http.ListenAndServeTLS(...)
Run Code Online (Sandbox Code Playgroud)

换句话说,使用 TLS 建立第一个连接?这种方法是否足以确保 WebSocket 上的整个通信从开始到结束的安全?我是否应该确定连接持续时间内的所有数据包传输也受到 TLS 保护?如果没有,如何在 Golang / Gorilla 框架中设置它?

Cer*_*món 5

使用 http.ListenAndServeTLS 加密用于 HTTP 协议和 WebSocket 协议的底层网络连接。

该方法可保护底层网络连接上的整个通信,包括所有 WebSocket 流量。

Gorilla 服务器代码使用 net/http 服务器提供的网络连接。Gorilla 服务器代码确实创建了新的网络连接。

http.ListenAndServeTLS 是一个调用较低级别函数和方法的辅助函数。它还可以直接调用那些较低级别的函数和方法。