首页 > 解决方案 > TLS 客户端证书:授权的哪个属性?

问题描述

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

这个想法是每个用户都被赋予一个访问级别,并且一些资源只对更高级别可用。然后使用证书将用户与其级别相匹配。

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

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

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

预先感谢

标签: sslauthorizationx509certificateclient-certificatesmutual-authentication

解决方案


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

如果您出于某种原因想要允许由任意 CA 颁发的证书,那么您已经意识到自己无法完成这种简单的映射。在这种情况下,可能会完成证书公钥或证书指纹之间的映射,这当然需要预先知道特定用户期望的确切证书。而且,每当客户端证书因为过期而需要更改时,都需要以某种方式更新此映射。


推荐阅读