当我这样做时curl https://10.184.96.62:3000/status,服务器发回 json 数据。都好。使用下面的 golang 代码,应用程序打印:2019/05/21 18:29:15 获取https://10.184.96.62:3000/status:x509:无法验证 10.184.96.62 的证书,因为它不包含任何 IP SANpackage mainimport ( "log" "net/http")func main() { _, err := http.Get("https://10.184.96.62:3000/status") if err != nil { log.Fatal(err) }}我错过了什么?
2 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
错误消息指示的问题特定于 HTTPS 与 IP 地址的组合:通常 SSL 证书使用主机名来检查服务器的真实性。在您的情况下,没有主机名,而是 IP 地址。您的问题有两种可能的解决方案:
使用主机名而不是 IP 地址并将该主机名放入您的证书中。
将您要使用的 IP 地址放入
subjectAltNames
证书的(“主题备用名称”- SAN)字段中(请参阅RFC 5280)。
潇湘沐
TA贡献1816条经验 获得超6个赞
问题出在我生成的证书上。我曾经openssl
创建一个自签名证书。正如我分享的那样,curl
能够使用它与服务器建立连接。但不是 go 应用程序。
在某个论坛上,我看到一条评论说openssl
在这种情况下开始工作很棘手。所以我用这个go代码来生成证书。使用此证书,go app 还能够在不对我在问题中共享的源代码进行任何更改的情况下发出请求。
希望这可以帮助有需要的人。
- 2 回答
- 0 关注
- 133 浏览
添加回答
举报
0/150
提交
取消