首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebSocket over TLS: Golang / Gorilla

WebSocket over TLS: Golang / Gorilla
EN

Stack Overflow用户
提问于 2020-04-20 22:25:03
回答 2查看 3.5K关注 0票数 1

我一直在尝试通过TLS建立一个WebSocket连接(所以使用加密)。我把Golang和Gorilla一起使用。WebSocket连接被实现为初始的HTTP连接,该连接被升级为WebSocket协议连接。代码如下:

代码语言:javascript
复制
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 
}

然后我们设置路由:

代码语言:javascript
复制
func main() {
    //...
    setupRoutes()
    log.Fatal(http.ListenAndServe(":8080", nil))
}

将最后一行更改为:

代码语言:javascript
复制
...http.ListenAndServeTLS(...)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-20 22:36:06

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

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2020-04-20 22:34:23

解决这个问题的一种方法是设置一个反向代理,比如使用certbot的nginx来生成证书。

下面是它的工作原理

代码语言:javascript
复制
[ Client ] ----------> [ nginx ] --------------> [ golang server ]
            Encrypted             Not encrypted
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61324875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档