CAC卡和Web服务器

6
我有一个客户希望在我们的网站上实现CAC。通常用户已经根据分配给他们的证书获得了访问权限。
他们想要通过输入CAC密码来验证身份,以便在单击登录按钮时进行身份验证。
我正在使用ActivClient管理CAC,但我不知道如何使网站与读卡器通信,以让用户输入密码并进行验证。
这是通过IIS设置完成还是需要更新代码才能与中间件进行通信?
提前致谢。
2个回答

8
我们使用的解决方案涉及对IIS进行几个配置更改以及对代码进行一些更改,以使用CAC提供的信息。
在IIS(8.0)中,我们只需将身份验证设置为匿名身份验证。 在SSL设置中,我们勾选了要求SSL,并在客户端证书下选择了要求选项。
认证后,根据您需要从证书获取的信息,可以使用以下方法访问它:
X509Certificate2 certificate = new X509Certificate2(Request.ClientCertificate.Certificate);

这将为您提供包含CAC携带信息的证书对象。您可以使用以下方式访问其中的一些属性:
certificate.GetNameInfo(X509NameType.SimpleName);  //X509NameType.EmailName, etc

那么请求x509证书是否提示用户输入他们的PIN码?这是让我困惑的部分。通信是如何进行的,我的应用程序如何知道它是否通过或失败?X509Certificate2 certificate = new X509Certificate2(Request.ClientCertificate.Certificate); 是否会返回null?顺便说一句,感谢您的快速回复,我非常感激。 - GameScrub
2
提示用户输入pin的部分是在SSL设置节的IIS设置中,您可以在那里设置需要客户端证书。在该区域中有3个选项:忽略、接受和要求。忽略将不会提示您。接受会提示您,但如果您点击取消,它将让您通过。要求会提示您,并在您点击取消时给出403错误。一旦您选择了证书,Request.ClientCertificate.Certificate 将被填充。如果您没有收到提示,则该对象将为空。 - Camilo

2

最近我在与国防部打交道时遇到了这个问题。这里没有任何涉及代码的内容,你只需要将IIS站点设置为使用集成安全性(或根据你的AD配置可能是证书认证),并关闭其他身份验证机制。然后浏览器将使用在Active Directory中配置的方法提示用户进行凭据认证,如果他们正确地使用AD,则应显示CAC证书选择和PIN窗口。请注意,您还必须使用HTTPS,否则出于安全原因,浏览器不会将CAC凭据传递给服务器。


2
我们的做法有所不同。在IIS中,我们将身份验证设置为匿名身份验证。然后在SSL设置中,我们勾选了“要求SSL”,并选择了客户端证书的“要求”选项。 - Camilo
1
这肯定是你应该添加为答案的另一个选项。我的项目要求从活动目录中提取用户凭据,而不需要提示输入用户名和密码,同时验证 CAC。这可能并不完全符合 OP 的要求。你的解决方案将允许 CAC 认证以及作为不同用户登录的能力。他的解决方案将取决于具体的要求。有几种方法可以做到这一点,几乎所有方法都涉及 IIS 配置而没有任何代码。 - Bradley Uffner
我不需要通过Active Directory进行身份验证的任何验证,我将从他们的cac证书中获取唯一标识符以绕过我们数据库上的登录。这个模型仍然有效吗?顺便感谢您的帮助,我非常感激。 - GameScrub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接