如何设置用Golang系统编写的https代理?

如何设置用Golang系统编写的https代理?

我有一个用 Golang 编写的代理应用程序。目前,代理不需要身份验证。我可以使用或不使用 TLS 证书来部署它。

一开始我使用 tls 证书部署了它。我尝试使用 Firefox 中的 foxyproxy 插件进行连接,一切正常。然后我尝试使用 curl 进行连接,如下所示

curl --proxy https://myproxy.com:port -v icanhazip.com

并且它返回正确的 IP,由于结果很详细,因此我看到握手成功。密码套件是ECDHE-RSA-AES256-GCM-SHA384。使用 foxyproxy 一切也运行正常。

现在,当我尝试在 Ubuntu 中使用此代理系统时,我收到错误。我HTTPS Proxy在 Ubuntu 的网络设置中的网络字段中设置了代理。现在,当我尝试访问类似https://www.google.com我收到来自 Chrome 的错误ERR_RESPONSE_HEADERS_TRUNCATED。似乎握手失败了。当我检查服务器日志时,我看到两种类型的错误:

http: TLS handshake error from myip:56126: tls: oversized record received with length 20037

或者

http: TLS handshake error from myip:55262: EOF

我进行了一些调查,发现当客户端未使用 tls 通信时会发生这些错误。我不知道问题是什么。

我像这样部署我的服务器:

server := &http.Server{
    Addr:    addr,
    Handler: handler,
}
err := server.ListenAndServeTLS("path/to/cert", "path/to/key")
log.Fatal(err)

我不知道它是否有帮助,但我正在使用 Certbot 从 LetsEncrypt 获取我的证书。

现在,当我部署没有 tls 证书的代码时,一切都正常,但我知道这会存在安全漏洞,并且只能用于调试。

任何帮助都非常感谢。我在 stackoverflow 上问了这个问题,但他们把我的问题标记为离题。我希望这是正确的地方。

相关内容