我正在為無法查詢 DNS 的設備編寫一些代碼。我將只有端口 80 和 443 可用。以下工作,但當然命中DNS。使用的域是我的個人域,而不是問題所針對的真實域 - 它與工作相關并經過編輯。這只是用來說明問題。package mainimport ( “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 mainimport ( “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 有關。#go-nuts 告訴我他們相信這會在它到達 HTTP 層之前發生?我已經戳了好幾個小時了,不知道如何讓它工作。
1 回答

回首憶惘然
TA貢獻1847條經驗 獲得超11個贊
我假設您的服務器正在使用 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")
}
- 1 回答
- 0 關注
- 190 瀏覽
添加回答
舉報
0/150
提交
取消