Golang https证书错误:远程错误:tls:未知证书颁发机构

问题描述 投票:1回答:1

我使用以下内容制作了证书和密钥

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

并在我的Golang代码中配置它

log.Fatal(http.ListenAndServeTLS(":4201", "cert.pem", "key.pem", router))

它在使用chrome访问时运行良好,但在使用firefox访问时会在控制台上抛出错误。

2018/03/02 16:54:11 http:TLS握手错误来自100.67.56.121:54397:远程错误:tls:未知证书颁发机构

我该如何解决这个问题?

firefox go self-signed
1个回答
0
投票

“远程错误”表示从客户端发送的错误(在本例中为firefox)。

解决方案是弄清楚为什么firefox不喜欢证书并修复它。

firefox不喜欢这个证书。打开firefox开发工具,看看是否可以找到有关证书的任何警告。如果您必须在Firefox中手动接受证书,那么Firefox仍然可能向服务器报告它不喜欢证书,即使您已经告诉firefox加载页面(参见下面的chrome示例)。

但是,由于这是自生成/签名证书,警告可能是因为firefox不信任此证书。解决方案是将此证书添加到firefox的可信证书(如果此服务器仅供您个人使用)或获取由商业CA或letsencrypt签名的证书。

“修复此服务器端”意味着修复有关如何提供证书/应用程序的任何内容,以使其受到Firefox的信任。或者我想如果你只是在进行开发,就会忽略这些错误。

更多细节...

这里的关键是这是一个“远程错误”,这意味着它是连接到您的服务器的CLI客户端的错误。在你的情况下,Firefox在TLS握手期间抱怨证书在某种程度上是无效的。

我注意到了铬的相同之处。 Cert由公共CA(即大多数浏览器应该信任的CA)签名但是当我在本地计算机上开发时,证书无效,因为主机名(localhost)与证书CommonName(CN)或Subject不匹配备用名称(SAN)。

最简单的方法就是查看wireshark中的TLS握手。

wireshark handshake capture

我告诉chrome接受证书,开始捕获并对页面进行了单刷新(在本例中为https://localhost:8081)。 Chrome不会向我显示警告页面并显示内容。但是,地址栏中有一个红色警告。

有趣的是(对我而言)它似乎(我不是TLS专家)有两个TLS握手。

客户端Hello Server Hello Alert(客户端错误)客户端Hello Server Hello Client完成握手...加密应用程序数据...

由于chrome不会中断我对页面的刷新,因此我不确定为什么chrome会对单页刷新进行两次握手(第一次使用Alert / failure)。

我在这里学到的有趣的一点(事后很明显)是,当它们拒绝你的证书时,可以从浏览器/客户端获得报告。这可以在服务器端(如果受监控)使用,以发现您的测试用例可能无法覆盖的生产中的细微证书错误配置。不幸的是,因为这是pre-http,你不会得到用户代理或任何有用的帮助再现....但是大量的这些错误占服务器流量的百分比表明你需要做一些严肃的跨浏览器/操作系统/设备测试

© www.soinside.com 2019 - 2024. All rights reserved.