问题描述
我正在使用RedHat 6(最终是7)和CoolKey作为我的PKCS11模块。
我需要一种无需编写智能卡针即可通过代码提取此信息的方法,无论是从Shell命令还是从智能卡库中获取。目前,我可以使用shell命令'pkcs11-tools --module -T'来获得通用名称,因此主题替代名称确实是我所追求的,但是我想找到一种更好的方式来获得通用名称(如果可用)
我知道此信息无需输入密码即可使用,因为我可以在RHEL(esc)上随附的Smartcard Manager中查看所有信息。如果有关系的话,我有根,中级和下级的证书链。
我的想法是我必须从卡中提取证书,并使用本地CA验证该证书,然后对其进行解密。我花了几天时间阅读有关APDU,智能卡和openssl的文档,却一无所获。
这是打开卡并查看详细信息时智能卡查看器显示的内容。我要从卡中提取Microsoft主体名称,以及在“层次结构”部分显示的“通用名称”以及其他用红色文字显示的位置。
从那以后我实际上已经切换到使用pkcs15-tool,因为pkcs11-tool切断了较长的通用名称(您可以在屏幕快照的标题栏中看到该名称,相同的问题)。 输出:“ pkcs15-tool --list-info”
Using reader with a card: <reader name>
PKCS#15 Card [LASTNAME.FirsTNAME.MIDDLENAME.12345678]:
Version : 0
Serial number : <big string>
Manufacturer ID : piv_II
Flags :
我当前的方法只是将括号中的字符串解析为通用名称,然后让用户使用Redhat智能卡工具手动输入替代名称。
解决方法
我可以使用Java bouncycastle和iaik pkcs11包装器来获得通用名称和UPN /证书替代名称。
*
upn前面附加了[[0]”,我不确定为什么会这样,因此我对其进行了操作以消除该问题。