【问题标题】:PKCS#11 driver prompts for PIN for each keyPKCS#11 驱动程序提示输入每个键的 PIN
【发布时间】:2011-09-09 22:12:53
【问题描述】:

我正在使用 Siemens 的CardOS API 驱动程序作为 PKCS#11 驱动程序从 PKI 卡加载证书,如下所示:

char[] pin = "123456".toCharArray();
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(pin);
KeyStore keyStore = KeyStore.Builder.newInstance("PKCS11", Security.getProvider("SunPKCS11-verinice"), pp).getKeyStore();
keyStore.load(null,pin);
keyStore.getKey("key 1", pin);
keyStore.getKey("key 2", pin);

尽管我将其作为参数传递,但驱动程序会提示为每个键输入 PIN。有没有其他方法可以通过 API 传递 PIN?我可以激活任何“PIN 缓存”吗?

【问题讨论】:

    标签: java pki pkcs#11


    【解决方案1】:

    您可以使用能够处理PasswordCallback 的自定义CallbackHandler,如section 3.1 of the Java PKCS#11 guide 中所述。当然,缓存密码时应谨慎行事。

    【讨论】:

    • 我已经尝试过了,但也不适用于这个驱动程序。我仍然会收到一个 Windows(不是 Java)弹出窗口来输入 PIN。
    【解决方案2】:

    我也在使用 CardOS 和 Siemens 卡。

    一张卡上有两个 PIN。

    1. 卡密码。用于解锁卡和读取证书。您可以使用自己的回调处理此 PIN。 PIN 码只需要一次。
    2. 签名密码。用于访问合格的签名证书。必须为每个签名输入此 PIN。 PIN 对话框来自 Siemens 中间件,您无法关闭它。

    在大多数情况下,两个 PIN 码是相同的(否则用户会感到困惑)。 我也有一张没有签名密码的卡。有了这个,我可以在没有另一个 PIN 输入的情况下签名。也许您可以删除签名 PIN 或获得一张没有签名 PIN 的卡。

    【讨论】:

      【解决方案3】:

      您应该向您的 PKCS#11 供应商询问这个问题,在这种情况下是西门子。您可能无法使用 Java 做任何事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        相关资源
        最近更新 更多