为了账号安全,请及时绑定邮箱和手机立即绑定

curl 能够从 https 获取;但来自 golang 的 http.get()

curl 能够从 https 获取;但来自 golang 的 http.get()

Go
qq_笑_17 2023-06-19 15:44:06
当我这样做时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 地址。您的问题有两种可能的解决方案:

  1. 使用主机名而不是 IP 地址并将该主机名放入您的证书中。

  2. 将您要使用的 IP 地址放入subjectAltNames证书的(“主题备用名称”- SAN)字段中(请参阅RFC 5280)。


查看完整回答
反对 回复 2023-06-19
?
潇湘沐

TA贡献1816条经验 获得超6个赞

问题出在我生成的证书上。我曾经openssl创建一个自签名证书。正如我分享的那样,curl能够使用它与服务器建立连接。但不是 go 应用程序。

在某个论坛上,我看到一条评论说openssl在这种情况下开始工作很棘手。所以我用这个go代码来生成证书。使用此证书,go app 还能够在不对我在问题中共享的源代码进行任何更改的情况下发出请求。

希望这可以帮助有需要的人。


查看完整回答
反对 回复 2023-06-19
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信