当我执行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)
}
}
我想念什么?
答案 0 :(得分:2)
错误消息指示的问题特定于HTTPS与IP地址的组合:通常,SSL证书使用主机名来检查服务器的真实性。在您的情况下,没有主机名,而是IP地址。对于您的问题,有两种可能的解决方案:
subjectAltNames
(“主题备用名称”-SAN)字段中(请参阅RFC 5280)。答案 1 :(得分:0)
问题出在我生成的证书上。我使用openssl
创建了一个自签名证书。在我共享时,curl
能够使用它与服务器建立连接。但不是go应用程序。
在某个论坛上,我看到一条评论,说在这种情况下使openssl
很难工作。因此,我使用此go code来生成证书。使用此证书,go app也可以发出请求,而无需更改我在问题中共享的源代码。
希望这可以帮助需要帮助的人。