我们正在尝试使我们的富客户端 C++ Windows 应用程序能够利用 DoD CAC 卡。
我们使用第三方库来保护使用 SSL 的客户端/服务器通信,它识别/处理通用智能卡,但前提是证书是由其自己的捆绑应用程序创建的。
为什么?证书不就是证书吗?它们有何不同?
具体来说,谁能给我指点简明的技术文档来解释相关标准的要求以及实现定义的内容?我试过查看实际规格,但它们太详细了,而且我发现了非常模糊的文章,无法回答我的问题。我正在寻找介于两者之间的东西。
我没有足够的评论点,但我想同意@Jay。您可能需要将此第三方库配置为信任 DoD 根证书,以便当 CAC 用户提供其客户端证书时,您的应用程序可以信任它。
国防部根证书是公开的:http: //dodpki.c3pki.chamb.disa.mil/rootca.html
此外,如果您观察到的行为是客户端甚至没有被提示选择客户端证书,或者您没有观察到在数据包跟踪中发送的客户端证书,那么这也可能是因为您的服务器不信任国防部加利福尼亚州。当表现良好的服务器请求客户端证书时,它还会公布其信任的 CA 的可分辨名称 (dn)。然后,行为良好的客户端将检查该列表,并将这些名称与它可用的客户端证书的颁发者进行比较。如果没有匹配,则客户端将发送“空”证书。我知道 IIS/Apache 和 Firefox/IE/Chrome 的行为是这样的。然而,Opera 似乎并没有根据所宣传的发行者进行区分,并且会发送客户放置的任何证书。
最后但并非最不重要的一点是,如果您的软件使用 PKCS#11,那么只要您的卡有 PKCS#11 提供程序(有几个 CAC 模块和“通用”供应商卡通常也附带一个),那么您不需要不需要关心实际的卡,因为 PKCS#11 将细节抽象掉了。