TLS客户端证书:授权的属性是什么?

问题描述 投票:0回答:1

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

这个想法是每个用户都有一个访问级别,有些资源只能用于更高级别。然后使用证书将用户与其级别进行匹配。

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

但是,我正在努力选择我应该用来将用户映射到他的级别的证书的哪个属性:

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

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

提前致谢

ssl authorization x509certificate client-certificates mutual-authentication
1个回答
0
投票

通常,使用客户端证书进行身份验证是通过让一些私有CA颁发客户端证书并在验证客户端证书时仅信任CA来完成的。在这种情况下,受信任的CA和只有此CA可以完全控制证书的主题,这意味着将CN映射到用户是完全正常的并且也是常用的。

如果你出于某种原因想要允许由任意CA发布的证书,那么这样的简单映射就不能像你自己实现的那样完成。在这种情况下,可以完成证书pubkey或证书指纹之间的映射,这当然要求预先知道特定用户期望的确切证书。而且,只要客户端证书因为过期而需要更改,就需要以某种方式更新此映射。

© www.soinside.com 2019 - 2024. All rights reserved.