真正的HTTPS服务器如何验证客户端证书?我的背景是企业对企业而不是普通的人类客户。我了解可信根CA证书的基本链验证。但是服务器通常有某种配置来指定他们想要信任的证书的主题名称,或者指纹值吗?
在一种情况下,代理服务器的私有CA可以对客户端证书进行签名,以便只接受它们的证书。在另一种情况下,服务器在其信任存储中信任由“常规”受信任CA (由客户选择)签名的证书。但是,如果您的系统要关闭(就像企业对企业的情况一样),那么您需要额外的筛选。
我意识到在应用程序级别,如果证书链可用,那么任何进一步的自定义筛选都可以完成。但我只想知道,在现实世界中,开箱即用,在TLS握手过程中,有什么额外的配置web服务器需要处理这个问题。
谢谢。
发布于 2015-05-20 21:53:30
当服务器使用IIS时,客户端身份验证意味着将客户端证书映射到标识,即帐户(本地帐户或域帐户,视上下文而定)。IIS可以应用两种不同的方法,名称混淆:
otherName类型的Subject Alt Name,使用微软指定的OID标识)。UPN的使用受某些神秘条件的影响,包括将立即颁发的CA证书(而不是根CA)的副本存储在IIS服务器计算机的"enterprise NTAuth“证书存储中,或者存储在AD服务器的证书存储中,或者两者都存储。您可以使用这个博客页面进行一些指导。在非微软世界中,在Apache服务器中,您将使用SSLRequire实现基于从证书中提取的元素(实际上是IssuerDN和SubjectDN)的访问规则。
必须记住的是:
发布于 2015-05-20 21:34:47
我不确定有什么解决办法。不同的策略用于实现不同的功能。
B2B部署的一个常见策略是服务器的组织充当CA,并从客户端签名公钥。当接收到客户端证书时,服务器验证签名,然后将证书映射到用户。用户映射通常通过从cert中提取字段来完成,但是也可以使用cert查找或其他策略。
如何实现此验证和映射将取决于所使用的服务器。
需要注意的一点是,您只能信任SSL互握手中使用的客户端证书。别让客户把他们的证书给你。您需要从SSL子系统获得它,以确保它已被验证(即:客户端已经证明它们持有与证书相对应的私钥)。
https://security.stackexchange.com/questions/89719
复制相似问题