猿问

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

当我这样做时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 SAN

package main


import (

        "log"

        "net/http"

)


func main() {

        _, err := http.Get("https://10.184.96.62:3000/status")

        if err != nil {

                log.Fatal(err)

        }

}

我错过了什么?


qq_笑_17
浏览 134回答 2
2回答

蛊毒传说

错误消息指示的问题特定于 HTTPS 与 IP 地址的组合:通常 SSL 证书使用主机名来检查服务器的真实性。在您的情况下,没有主机名,而是 IP 地址。您的问题有两种可能的解决方案:使用主机名而不是 IP 地址并将该主机名放入您的证书中。将您要使用的 IP 地址放入subjectAltNames证书的(“主题备用名称”- SAN)字段中(请参阅RFC 5280)。

潇湘沐

问题出在我生成的证书上。我曾经openssl创建一个自签名证书。正如我分享的那样,curl能够使用它与服务器建立连接。但不是 go 应用程序。在某个论坛上,我看到一条评论说openssl在这种情况下开始工作很棘手。所以我用这个go代码来生成证书。使用此证书,go app 还能够在不对我在问题中共享的源代码进行任何更改的情况下发出请求。希望这可以帮助有需要的人。
随时随地看视频慕课网APP

相关分类

Go
我要回答