http - 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)
}
}
我错过了什么?
解决方案
错误消息指示的问题特定于 HTTPS 与 IP 地址的组合:通常 SSL 证书使用主机名来检查服务器的真实性。在您的情况下,没有主机名,而是 IP 地址。您的问题有两种可能的解决方案:
- 使用主机名而不是 IP 地址并将该主机名放入您的证书中。
- 将您要使用的 IP 地址放入
subjectAltNames
证书的(“主题备用名称”-SAN)字段中(参见RFC 5280)。
推荐阅读
- angular - 带有 HttpParams 的 HttpClient POST
- python - Python如何将多个参数作为列表传递而不是单独传递
- c# - CosmosDB:ReadItemAsync 比对具有大型嵌套集合的项目使用可查询的需要更多的 RU
- laravel - laravel 表单请求失败时如何抛出异常?
- conditional-statements - 条件句和 Gekko
- c - OpenDir 错误 /proc 文件:没有这样的文件或目录
- r - 使用 gsub() 意外删除字符串结尾
- json - 使用 jq 将多个条目连接成单个字符串值?
- sql - Oracle:按周获取可用数据时间跨度的平均值
- javascript - 从 CSS 工具提示的标题文本中删除虚线下边框