如何使用 Java 从智能卡中提取 X509 证书?

How can I extract an X509 certificate from a smart card using Java?

我使用OmniKey 3121 reader并且可以使用javax.smartcardioAPI向卡reader发送APDU命令。我不确定是否有标准方法来访问存储在卡上的证书。指向示例代码以读取证书数据的指针将大有帮助。

另外,SUN PKCS#11 library可以帮助从智能卡中提取证书吗?看起来这个库可以帮助解析证书和提取字段值,但它也可以 extract/export 来自智能卡的证书本身吗?

[据我所知]这在很大程度上取决于卡片上的小程序实现以及卡片实现本身。我的意思是,card-applet 程序员指定了您必须发送以使用 his/her applet 的命令以及它们的响应形式。因此,如果没有 generate/verify 你的 X509 证书的小程序的文档,你将无法编写客户端应用程序。

X.509 证书只是卡的被动数据。它从不通过卡进行评估,而只是根据要求发送到外面。因此,访问证书的方法由外界决定,很可能分别根据 PKCS 15 或 ISO 7816-15。正如已经指出的那样,额外的文档至少是有用的,甚至是必要的(如果 7816-15 没有帮助)。

我可以使用 SUN PKCS#11 提供程序库提取证书。以下文章中提供的详细信息有所帮助:http://www.developer.com/java/other/article.php/10936_3587361_8/Java-Applet-for-Signing-with-a-Smart-Card.htm