使用IAIK pkcs11wrapper从Gemalto智能卡读取对象时出错

时间:2015-05-28 13:24:54

标签: java smartcard pkcs#11 gemalto

我正在尝试从智能卡中读取公共证书名称,以便在使用金雅拓智能卡签署文件之前显示给用户。 我已经按照iaikPkcs11Wrapper演示中的getInfo示例进行了如下操作:

        Module pkcs11Module = Module.getInstance(settings.getCryptoDll());
        Slot[] slotList;
        try{
            slotList = pkcs11Module.getSlotList(true);
        }catch(TokenException tex){//module is not initialised
            tex.printStackTrace();
            pkcs11Module.initialize(new DefaultInitializeArgs());
            slotList = pkcs11Module.getSlotList(true);
        }
        for (Slot slot : slotList) {
            Token token = slot.getToken();
            iaik.pkcs.pkcs11.Session session = token.openSession(true, SessionReadWriteBehavior.RO_SESSION, null, null);
            session.findObjectsInit(null);
            Object[] objects = new Object[0];
            try {
                objects = session.findObjects(1);

此行始终在objects = findObjects(1);行,并且出现CKR_TEMPLATE_INCONSISTENT异常。

据我所知,文档session.findObjectsInit(null)应该只返回卡上的所有可访问对象,然后您可以将它们与类型进行比较。

我有各种智能卡,它们都像这样失败了,我也尝试用GenericTemplate对象和X509PublicKeyCertificate调用session.findObjectsInit(tempObj),它们都返回相同的异常,并且使用X509AttributeCertificate,它不返回任何对象但不返回抛出异常。

我很感激任何人都可以给出的任何指示。或者我需要使用GenericTemplate创建匹配的模板对象?我不确定为什么我得到异常,因为我认为将对象传递给为该对象过滤的getObjectInit方法,因此返回的任何内容都应匹配。

修改 我随后尝试使用其他模板和一些不在卡上的对象只返回一个空数组 - 没有例外,我认为卡片只是抛出ckr_template_inconsistent异常,任何帮助都会感激不尽。

EDIT2 我现在尝试使用一些新的'V3'卡,它们实际上工作,我的所有测试卡都使用另一种技术(我们目前使用capicom通过com4J进行签名),所以也许iaik包装器或gclib存在问题.dll(或我)。

0 个答案:

没有答案