从PIV智能卡中提取名称

问题描述

我正在尝试从PIV智能卡中提取以下内容

  1. 主题通用名称
  2. 证书主题替代名称/ Microsoft主体名称

我正在使用RedHat 6(最终是7)和CoolKey作为我的PKCS11模块。

我需要一种无需编写智能卡针即可通过代码提取此信息的方法,无论是从Shell命令还是从智能卡库中获取。目前,我可以使用shell命令'pkcs11-tools --module -T'来获得通用名称,因此主题替代名称确实是我所追求的,但是我想找到一种更好的方式来获得通用名称(如果可用)

我知道此信息无需输入密码即可使用,因为我可以在RHEL(esc)上随附的Smartcard Manager中查看所有信息。如果有关系的话,我有根,中级和下级的证书链。

我的想法是我必须从卡中提取证书,并使用本地CA验证该证书,然后对其进行解密。我花了几天时间阅读有关APDU,智能卡和openssl的文档,却一无所获。

编辑 RHEL智能卡管理器的视图:

enter image description here

这是打开卡并查看详细信息时智能卡查看器显示内容。我要从卡中提取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]”,我不确定为什么会这样,因此我对其进行了操作以消除该问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...