使用 IP 时是否可能发生 MITM

Luc*_*orr -1 security ssl networking go

如果我向通过 IP 引用的 API 服务器发出 TLS 请求,证书验证是否仍然可能阻止各种 MITM 攻击?

背景信息(如果它澄清了问题):我正在使用没有与其关联的域名的静态 IP 向 REST API 发出 TLS 请求。为了在 Go 中实现此功能,我必须InsecureSkipVerify: true,在 HTTP 客户端的传输层进行设置。这是否会降低我的请求的安全性?我认为确实如此,但我真的不知道为什么。

col*_*tor 5

正如@James 指出的那样,这IP是 TLS 握手中不相关的组成部分。

标准程序是:

  • 拨号主机名/端口
  • DNS 查找主机名以获取 IP
  • 带 IP 的 TLS 握手
    • 揭示主机名证书身份
    • 验证证书名称与主机名匹配

使用InsecureSkipVerify: true会跳过最后一步 - 通常仅在开发/测试期间使用。

但是,在最后一步中,您可以使用不同的名称来匹配证书身份:利用tls.ConfigServerName中的字段:

tc = &tls.Config{
    ServerName: "myhostname", // certificate identity
    RootCAs:    rootca,
    // InsecureSkipVerify: true // <- avoid using this
}

d := tls.Dialer{
    Config: tc
}

conn, err := d.Dial("tcp", "127.0.0.1:8080")
Run Code Online (Sandbox Code Playgroud)

在这里,我们拨打一个 IP 地址,执行 TLS 握手,但127.0.0.1它不是将主机证书与 进行比较的默认行为,而是验证它是否匹配myhostname