【发布时间】:2018-07-02 17:41:52
【问题描述】:
我已经在 Go 中成功设置了 TLS 相互身份验证客户端/服务器有一段时间了,但现在希望进行一些小的调整。
具体来说,我想知道是否有一种方法只需要一个特定的客户端证书来进行相互身份验证。
我目前正在使用这样的东西:
// Load cert and build pool
caCert, _ := ioutil.ReadFile(caPath)
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
// Require client authentication
tlsConfig := &tls.Config{
ClientAuth: tls.RequireAndVerifyClientCert,
ClientCAs: caCertPool,
}
这很好用,但是如果我正在读取的 PEM 文件实际上是一个证书链(A 由 B 颁发,B 是根 CA),这实际上最终会信任 B 颁发的任何证书,我不想。
有什么方法可以调整此代码以仅信任特定的 A 证书?
似乎如果我只在加载的 PEM 文件中包含 A,server handshake code 会告诉客户端“将你所有由 A 签名的证书发送给我”,这当然不是我想要的,因为证书 A 没有签名由 A.
理想情况下,我想说“您需要专门的证书 A”才能成功连接。有这样的机制吗?
【问题讨论】: