登录
首页 >  Golang >  Go问答

使用 Golang / Gorilla 实现基于 TLS 的 WebSocket

来源:stackoverflow

时间:2024-02-20 19:36:25 215浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《使用 Golang / Gorilla 实现基于 TLS 的 WebSocket》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我一直在尝试通过 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 
}

然后我们设置路由:

func main() {
    //...
    setuproutes()
    log.fatal(http.listenandserve(":8080", nil))
}

将最后一行更改为:

...http.ListenAndServeTLS(...)

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


解决方案


使用http.listenandservetls加密用于http协议和websocket协议的底层网络连接。

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

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

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

解决此问题的一种方法是使用 certbot 设置反向代理(例如 nginx)来生成证书。

这是它的工作原理

[ Client ] ----------> [ nginx ] --------------> [ golang server ]
            Encrypted             Not encrypted

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>