gpt4 book ai didi

ssl - 从特定 IP 获取 HTTPS Assets 并跳过 DNS 查找

转载 作者:IT王子 更新时间:2023-10-29 01:42:08 25 4
gpt4 key购买 nike

我正在为无法查询 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 有关。 #go-nuts 告诉我他们相信这会在它到达 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")
}

关于ssl - 从特定 IP 获取 HTTPS Assets 并跳过 DNS 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37263175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com