TLS上的WebSocket:Golang/大猩猩

TLS上的WebSocket:Golang/大猩猩,go,ssl,https,websocket,gorilla,Go,Ssl,Https,Websocket,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 { //...

我一直在尝试通过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.ListendServetls是一个助手函数,它调用较低级别的函数和方法。它还可以直接调用那些较低级别的函数和方法。

谢谢您的建议,但这实际上并不能回答我的问题,也不能解决问题。请注意,根据我的问题,connection Client->Nginx与我的问题中描述的原始连接具有相同的属性。可能存在误解,但我想指出的是,您可以轻松设置https(+wss)使用nginx的服务器,您的客户端可以安全地连接到该服务器,该服务器将请求代理到您的golang服务器。nginx和go服务器之间的连接不安全,但不一定要安全,因为客户端无法直接访问该服务器。