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