如果我向通过IP引用的API服务器发出TLS请求,证书验证阻止的MITM攻击类型是否仍然可能?
背景信息,如果它澄清了这个问题:我正在向具有静态IP的REST API发出TLS请求,该IP没有与之关联的域名。要在Go中实现这一点,我必须在HTTP客户端的传输层设置InsecureSkipVerify: true,
。这会降低我的请求的安全性吗?我想是的,但我真的不知道为什么。
正如@James所指出的,IP
是TLS握手的一个无关组件。
而标准程序是:
- 拨号主机名/端口
- DNS查找主机名以获取IP
- 带IP的TLS握手
- 显示主机名证书标识
- 验证证书名称是否与主机名匹配
使用InsecureSkipVerify: true
跳过最后一步,通常只在开发/测试期间使用。
但是,在最后一步中,您可以使用不同的名称来匹配证书标识:利用tls中的ServerName
字段。配置:
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")
在这里,我们拨一个IP地址,执行TLS握手,但不是将主机证书与127.0.0.1
进行比较的默认行为,而是验证它是否与myhostname
匹配。