有的场景server IP动态变化,不能使用IP签发证书(或者因为多实例之类的问题),用域名签发又需要dns,希望客户端能使用IP访问,证书仍然用域名签发。
在一般的实现用,会把dial的dest作为SANs,跟证书的subject匹配,返回失败:
CRYPTO_ERROR (0x12a): x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs
但TLS也会提供自己设置证书subject的接口,以quic-go为例:
tlsConf := &tls.Config{
RootCAs: pool,
InsecureSkipVerify: false,
ServerName: "localhost", //客户端认为server提供的证书的subject
NextProtos: []string{"quic"},
}
另外也可以跳过TLS自带的验证,自己实现证书验证: