TLS 客户端证书:哪个属性用于授权?
TLS client certificates : which attribute for authorization?
我正在尝试设置一个 Web 服务,该服务使用在 TLS 握手期间发送的 x509 客户端证书进行身份验证,并检查用户是否有权访问所请求的资源。
这个想法是给每个用户一个访问级别,一些资源只对更高级别可用。然后使用该证书将用户与其级别相匹配。
我在配置 Apache 以根据根 CA 验证证书并将证书转发到后端应用程序(基于 python 的 XML-RPC 服务器)时没有遇到任何问题。
然而,我正在努力选择我应该使用证书的哪些属性来将用户映射到他的级别:
- Common Name 字段似乎是一个自然的选择,但我想知道这个解决方案的安全性如何,因为没有什么可以阻止多个中间 CA 提供具有相同 CN 的证书
- Public 密钥本身显然更安全,但它的实用性如何?如果客户必须在证书到期后更新证书,它会保持不变吗?还有一个更大的字符串的存储和比较速度的问题
- 整个证书本身或其指纹指纹可以替代 public 密钥,但如果更新证书,客户端将无法连接
我目前倾向于 public 键,但它是这种情况下的最佳选择吗?或者有更好的选择吗?
提前致谢
通常,使用客户端证书进行身份验证是通过拥有一些颁发客户端证书的私有 CA 来完成的,并且仅在验证客户端证书时信任该 CA。在这种情况下,受信任的 CA 并且只有这个 CA 可以完全控制证书的主题,这意味着将 CN 映射到用户非常好并且也很常用。
如果您出于某种原因想要允许由任意 CA 颁发的证书,那么您已经意识到,这种简单的映射将无法完成。在这种情况下,可以完成证书公钥或证书指纹之间的映射,这当然需要预先知道特定用户期望获得哪个确切证书。而且,每当客户端证书因过期而需要更改时,都需要以某种方式更新此映射。
我正在尝试设置一个 Web 服务,该服务使用在 TLS 握手期间发送的 x509 客户端证书进行身份验证,并检查用户是否有权访问所请求的资源。
这个想法是给每个用户一个访问级别,一些资源只对更高级别可用。然后使用该证书将用户与其级别相匹配。
我在配置 Apache 以根据根 CA 验证证书并将证书转发到后端应用程序(基于 python 的 XML-RPC 服务器)时没有遇到任何问题。
然而,我正在努力选择我应该使用证书的哪些属性来将用户映射到他的级别:
- Common Name 字段似乎是一个自然的选择,但我想知道这个解决方案的安全性如何,因为没有什么可以阻止多个中间 CA 提供具有相同 CN 的证书
- Public 密钥本身显然更安全,但它的实用性如何?如果客户必须在证书到期后更新证书,它会保持不变吗?还有一个更大的字符串的存储和比较速度的问题
- 整个证书本身或其指纹指纹可以替代 public 密钥,但如果更新证书,客户端将无法连接
我目前倾向于 public 键,但它是这种情况下的最佳选择吗?或者有更好的选择吗?
提前致谢
通常,使用客户端证书进行身份验证是通过拥有一些颁发客户端证书的私有 CA 来完成的,并且仅在验证客户端证书时信任该 CA。在这种情况下,受信任的 CA 并且只有这个 CA 可以完全控制证书的主题,这意味着将 CN 映射到用户非常好并且也很常用。
如果您出于某种原因想要允许由任意 CA 颁发的证书,那么您已经意识到,这种简单的映射将无法完成。在这种情况下,可以完成证书公钥或证书指纹之间的映射,这当然需要预先知道特定用户期望获得哪个确切证书。而且,每当客户端证书因过期而需要更改时,都需要以某种方式更新此映射。