我正在为一个无法查询DNS的设备编写一些代码。我将只有端口80和443可用。
以下内容有效,但当然会影响DNS。使用的域是我的个人域,而不是问题所在的真正域——它与工作相关并经过编辑。这只是用来说明这个问题。
package main
import (
“log”
“net/http”
)
func main() {
client := &http.Client{}
req, err := http.NewRequest(“GET”, “https://donatstudios.com/images/Spacecat/spacecat.svg”, nil)
if err != nil {
log.Fatal(err)
}
_, err = client.Do(req)
if err != nil {
log.Fatal(err)
}
log.Fatal(“no errors”)
}
我更改代码以命中特定的IP地址ala:
package main
import (
“log”
“net/http”
)
func main() {
client := &http.Client{}
req, err := http.NewRequest(“GET”, “https://162.243.23.224/images/Spacecat/spacecat.svg”, nil)
if err != nil {
log.Fatal(err)
}
req.Host = “donatstudios.com”
_, err = client.Do(req)
if err != nil {
log.Fatal(err)
}
log.Fatal(“no errors”)
}
现在收到"无法验证162.243.23.224的证书,因为它不包含任何IP SAN"
当不使用https域时,上述代码有效。
大概这与SSL有关#疯了的人告诉我,他们相信这会在它进入HTTP层之前发生吗?我已经戳了好几个小时了,不知道该怎么做。
我假设您的服务器使用的SNI与示例中使用的一样。试试这个,看看它是否适合你。
package main
import (
"crypto/tls"
"log"
"net/http"
)
func main() {
tlsConfig := &tls.Config{
ServerName: "moupon.co",
}
tlsConfig.BuildNameToCertificate()
transport := &http.Transport{TLSClientConfig: tlsConfig}
client := &http.Client{Transport: transport}
req, err := http.NewRequest("GET", "https://216.239.32.21/s/img/logo.png", nil)
if err != nil {
log.Fatal(err)
}
req.Host = "moupon.co"
_, err = client.Do(req)
if err != nil {
log.Fatal(err)
}
log.Fatal("no errors")
}