TLS clientAuth需要通过整个证书链的ExtKeyUsageClientAuth

时间:2014-01-02 02:53:25

标签: authentication ssl go x509

我正在尝试使用go进行TLS客户端身份验证。当我创建一个设置了ExtKeyUsageClientAuth的简单自签名客户端证书时,它工作正常,但是当客户端尝试连接更长的证书链时:

CA - >中间体 - >客户

我收到以下错误:x509: certificate specifies an incompatible key usage

相关电话是

handshake_server.go: processCertsFromClient()

verify.go: checkChainForKeyUsage()

如果我正在阅读代码,我的链中的每个证书都必须具有客户端身份验证扩展密钥集。

我不是x509专家,但这似乎是一个奇怪的要求,我从未见过CA或具有客户端身份验证设置的中间证书。我不认为如何配置一个长期存在的CA来处理所有可能的未来关键用法。

那么错误在哪里?

我可以想到一些可能性

  1. 我不明白TLS(可能)
  2. 我的假设是客户端身份验证的工作原理与服务器身份验证错误
  3. 我正在读错的代码
  4. 我的服务器配置错误
  5. golang的TLS客户端身份验证实现错误

1 个答案:

答案 0 :(得分:3)

关于http://golang.org/issue/7423的讨论表明这是按预期工作的。那里的评论解释了如何生成正确的证书。