从特定IP获取HTTPS资产并跳过DNS查找



我正在为一个无法查询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")
}

最新更新