TLS客户端证书:授权哪个属性?

时间:2019-03-03 12:35:57

标签: ssl authorization x509certificate client-certificates mutual-authentication

我正在尝试设置一个Web服务,该服务使用TLS握手期间发送的x509客户端证书进行身份验证,并检查用户是否有权限访问请求的资源。

这个想法是给每个用户一个访问级别,并且某些资源仅对更高级别可用。然后,该证书用于将用户匹配到其级别。

我可以毫无疑问地配置Apache以根据根CA验证证书并将证书转发到后端应用程序(基于python的XML-RPC服务器)。

但是,我一直在努力选择应该用于将用户映射到其级别的证书的哪些属性:

  • “通用名称”字段似乎是很自然的选择,但是我想知道这种解决方案的安全性如何,因为没有什么可以阻止多个中间CA提供具有相同CN的证书
  • 公钥本身显然更安全,但是使用起来有多实用?如果客户在证书到期后必须续签证书,它将保持不变吗?还有更大的字符串的存储和比较速度的问题
  • 整个证书本身或其指纹图谱可以替代公钥,但是如果更新证书,客户端将无法连接

我目前倾向于使用公钥,但这是这种情况下的最佳选择吗?还是有更好的选择?

感谢

1 个答案:

答案 0 :(得分:0)

通常,通过具有一些颁发客户端证书的专用CA来完成客户端证书的身份验证,并且仅在验证客户端证书时信任该CA。在这种情况下,受信任的CA以及只有此CA才能完全控制证书的主题,这意味着将CN映射到用户是完美的并且也是常用的。

如果您出于某种原因而不想允许任意CA颁发的证书,那么您将无法实现这种简单的映射。在这种情况下,可以在证书公钥或证书指纹之间进行映射,这当然要求预先知道特定用户期望使用哪个确切证书。而且,每当客户端证书由于过期而需要更改时,都需要以某种方式更新此映射。