我正在尝试设置一个Web服务,该服务使用在TLS握手期间发送的x509客户端证书进行身份验证,以及检查用户是否具有访问请求的资源的授权。
这个想法是每个用户都有一个访问级别,有些资源只能用于更高级别。然后使用证书将用户与其级别进行匹配。
我没有问题配置Apache以根据根CA验证证书并将证书转发到后端应用程序(基于python的XML-RPC服务器)。
但是,我正在努力选择我应该用来将用户映射到他的级别的证书的哪个属性:
我目前倾向于公钥,但它是这种情况下的最佳选择吗?或者有更好的选择吗?
提前致谢
通常,使用客户端证书进行身份验证是通过让一些私有CA颁发客户端证书并在验证客户端证书时仅信任CA来完成的。在这种情况下,受信任的CA和只有此CA可以完全控制证书的主题,这意味着将CN映射到用户是完全正常的并且也是常用的。
如果你出于某种原因想要允许由任意CA发布的证书,那么这样的简单映射就不能像你自己实现的那样完成。在这种情况下,可以完成证书pubkey或证书指纹之间的映射,这当然要求预先知道特定用户期望的确切证书。而且,只要客户端证书因为过期而需要更改,就需要以某种方式更新此映射。