Joe*_* D. 6 .net windows iis client-certificates cac
我们为DoD开发了一个.NET C#Web应用程序,它使用CAC(通用访问卡)作为唯一的身份验证方法.我们在服务器上有一个受信任的SSL,应用程序在几个位置运行,并且一切正常 - 在大多数情况下.
问题#1
主要问题是,在我们的某些内部开发服务器上,当您使用读卡器中的有效CAC进行"登录"时,只显示一个证书,而不是来自CAC.它用于通过网络验证我的工作笔记本电脑("客户端身份验证"和"智能卡登录"属性在"证书"管理单元中进行检查).
我们在另一个网络上有另一台服务器,其中客户端证书身份验证运行良好 - 它显示来自CAC的证书,并且不显示上述证书.我已经尝试在这两台服务器上并排比较Windows Server 2008 R2中我能想到的一切,看看我是否能找到可能不同的东西,但它们似乎都是Windows Server 2008的默认安装R2.
以下代码用于读取客户端证书:
if (Request.ClientCertificate.IsPresent)
{
HttpClientCertificate Cert = HttpContext.Current.Request.ClientCertificate;
//use cert info to check db and create session
}
Run Code Online (Sandbox Code Playgroud)
此文件位于IIS> SSL设置>"要求SSL"和"需要客户端证书"的目录中.
我不知道这是服务器配置问题还是编码问题,但是我已经开展了几个月的工作,并且无法找到答案为什么应用程序只有在托管一些CAC证书时才能获得CAC证书服务器.
问题#2
如果我在正确读取CAC的服务器上访问应用程序,它会从用于访问该计算机上的应用程序的所有CAC中提取所有证书的副本,而不是仅从读卡器中的CAC证书中获取证书.
AKO [https://akologin.us.army.mil/]至少过滤掉电子邮件证书; 但是,该站点不托管在Windows机器上.
结论
在我看来,除了Request.ClientCertificate集合和IIS中的两个复选框之外,还必须有一个更好,更深入的机制来访问和过滤来自智能卡读卡器的客户端证书.
小智 6
我有同样的问题.在系统事件日志中查找SChannel警告.
"当请求客户端身份验证时,此服务器会向客户端发送可信证书颁发机构列表.客户端使用此列表选择服务器信任的客户端证书.目前,此服务器信任该列表具有的许多证书颁发机构这个列表因此被截断了.这个机器的管理员应该检查信任的证书颁发机构进行客户端身份验证,并删除那些真正不需要信任的证书."
受信任的根证书颁发机构>证书中有大约一百个证书.删除了所有不需要的证书,并以管理员身份执行了IISreset,所有站点再次开始工作.
乔,
对于问题#1,可以尝试以下方法:对照非工作服务器检查工作服务器中的受信任根证书颁发机构证书。听起来您可能有一个或多个丢失或不匹配的服务器证书。如果您的证书已过期、不匹配或丢失,您可以从 DISA 下载它们。不工作的服务器可能无法下载最新的证书更新。我们曾经遇到过一个案例,商店里的证书太多了。在这种情况下,我们只需删除旧的和/或不需要的证书即可。只需确保在删除之前导出您计划删除的所有证书...以防万一您稍后发现您毕竟需要它们(这将是“经验”谈话)!
我希望这对您有所帮助,而不仅仅是您已经尝试过的事情。祝你好运!