2010-07-08 40 views
1

我正在开发CAC身份验证应用程序。从无CAC销售证书

我正在运行RHEL 5.5并在我的机器上安装了读卡器。当我插入智能卡/ CAC时,弹出通知出现在时钟窗口的右上角,并且可以通过单击图标(带有锁的卡)来访问“智能卡管理器”出现。通过显示智能卡管理器,我可以查看卡上的证书列表以及详细信息等,而无需输入密码。

现在,另一方面,当我在我的C++代码中使用nss库获取插槽和列表证书时,我无法获取证书列表而无需输入引脚。

我想要做的是从卡片上获取证书列表,并在对话框中向用户显示该列表,然后用引脚文本字段填写,以便用户可以输入该引脚,然后选择要使用的证书认证ALL IN ONE一步,而不是应用程序必须显示一个单独的对话框的引脚,然后弹出证书选择,但它似乎是不可能使用nss库,但另一方面智能卡管理器gui可以轻松地做到这一点。一个人可以指出我正确的方向,如果有一个单独的API我可以用来从CAC获得证书列表?谢谢!

回答

2
  • 搜索“友好证书”或“公开可读证书”网络功能/机制(为0x1 < < 28时加载的模块) - 默认NSS假设需要一个PIN之前什么可以读从令牌。这是恕我直言绝对的愚蠢,并保持它作为默认...
  • 一定要考虑到密码键盘读卡器(受保护的认证路径PKCS#11),你希望会喜欢,支持更好的安全性为用户谁拥有的能力。连接PINpad阅读器时,不应显示PIN输入文本框。
+0

martin,谢谢你的回复。我必须承认我是C++和nss api的新手,所以我不知道(0x1 << 28)是什么意思。我在我的C++程序中使用此方法加载模块:module = SECMOD_LoadUserModule(moduleSpecName,NULL,PR_TRUE); 如何使用上述方法设置此标志? 在我的应用程序中没有涉及pinpad。这是一个Linux登录应用程序。谢谢! – azm882 2010-07-09 15:46:16

+0

从https://developer.mozilla.org/zh/PKCS11_Module_Specs: slotParams - 空格分隔的名称/值对列表,其中名称是slotID,值是与该slotID相关的空间分隔列表参数。 有效slotParams值为: slotFlags - 其中该槽被预期逗号分隔的密码组列表成为(不区分大小写)默认的实现。 有效的标志是: PublicCerts – 2010-07-11 10:04:34

+0

万一有人正在寻找细节,在我的情况下,下面的工作: 静态字符MODULENAME [] = “库= \”/ usr/lib中/ PKCS11/libcoolkeypk11.so \” NAME = \ “智能卡\” NSS = \ “slotParams = {为0x1 = [slotFlags = 'PublicCerts']} \”“; 模块= SECMOD_LoadUserModule(MODULENAME,NULL,PR_TRUE); – azm882 2010-07-19 17:05:47