go - 基于 TLS 的 WebSocket : Golang/Gorilla

标签 go ssl https websocket gorilla

我一直在尝试通过 TLS 建立 WebSocket 连接(因此使用加密)。我将 Golang 与 gorilla 一起使用。 WebSocket 连接实现为初始 HTTP 连接,该连接升级为 WebSocket 协议(protocol)连接。代码是这样的:

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 框架中设置?

最佳答案

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

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

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

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

关于go - 基于 TLS 的 WebSocket : Golang/Gorilla,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61324875/

相关文章:

javascript - 在 Node 中安装自定义 SSL 证书 (UNABLE_TO_VERIFY_LEAF_SIGNATURE)

git - golang git pull repo

oracle - 使用 Oracle 调用接口(interface) (OCI) 设置操作系统用户

ssl - 是否推荐使用通配符 SSL 证书?

ssl - heroku:在免费计划上设置 SSL 证书?

javascript - Node.js Https POST - 可能的错误代码

arrays - channel 元素类型太大 Golang

php - 在 golang 中读取 *.wav 文件

Android 和引入自己的自定义 key 存储的异常

zend-framework - htaccess https 仅在特定的 Zend Frameworks Controller /操作上重定向