首页 > 解决方案 > curl 能够从 https 获取;但是从 golang 的 http.get() 中,相同的 https URL 不起作用

问题描述

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

我错过了什么?

标签: httpgocurlhttps

解决方案


错误消息指示的问题特定于 HTTPS 与 IP 地址的组合:通常 SSL 证书使用主机名来检查服务器的真实性。在您的情况下,没有主机名,而是 IP 地址。您的问题有两种可能的解决方案:

  1. 使用主机名而不是 IP 地址并将该主机名放入您的证书中。
  2. 将您要使用的 IP 地址放入subjectAltNames证书的(“主题备用名称”-SAN)字段中(参见RFC 5280)。

推荐阅读