java pkcs 11 write,Java 调用 pkcs#11的dll库,获取到的KeyStore 的size为0,是什么原因?...

这篇博客讲述了作者在尝试通过HttpClient进行https请求时,利用厂商提供的USB-KEY(型号SJK1217)及其PKCS#11驱动程序进行安全认证。在Java中,作者设置了SunPKCS11提供者,并加载了驱动库,但发现KeyStore的size为0,即无法获取到私钥。问题可能在于配置或USB-KEY的PIN码验证。博客寻求对此问题有经验的技术人员的帮助。
摘要由CSDN通过智能技术生成

插入USB-KEY, 想通过HttpClient来向服务器发送https请求。现在厂商已提供的USB-KEY的驱动程序PKCS#11接口,于是通过java程序访问USB-KEY。

代码如下

// 厂商提供的UKEY型号名称

private static final String UKEY_PROVIDER = "SJK1217";

// UKEY驱动lib库文件

private static final String UKEY_LIB = "E:/cer/System32/SJK1217Pkcs.dll";

// UKEY的PIN码

private static final String UKEY_PIN = "1234";

private static String keystorePath = "E:/cer/hxx_sign.keystore";

private static String keystorePass = "12345678";

public static void main(String[] args) throws Exception {

String pkcs11config = "name = " + UKEY_PROVIDER + "\nlibrary = "+ UKEY_LIB + "\n";

byte[] pkcs11configbytes = pkcs11config.getBytes();

ByteArrayInputStream configStream = new ByteArrayInputStream(pkcs11configbytes);

SunPKCS11 ps = new sun.security.pkcs11.SunPKCS11(configStream);

System.out.println(ps.toString());

Security.addProvider(ps);

KeyStore.CallbackHandlerProtection pinHandler = new KeyStore.CallbackHandlerProtection(new TextCallbackHandler());

KeyStore ks = KeyStore.Builder.newInstance("PKCS11", ps, pinHandler)

.getKeyStore();

ks.load(null, UKEY_PIN.toCharArray());

printKeyStoreInfo(ks);

}

// 打印 KeyStore中的信息

public static void printKeyStoreInfo(KeyStore keystore) throws Exception {

System.out.println("Provider : " + keystore.getProvider().getName());

System.out.println("Type : " + keystore.getType());

System.out.println("Size : " + keystore.size());

Enumeration en = keystore.aliases();

while (en.hasMoreElements()) {

String alias = (String) en.nextElement();

System.out.println("Alias: " + alias);

X509Certificate cert = (X509Certificate) keystore

.getCertificate(alias);

System.out.println("Certificate: " + cert);

PrivateKey privateKey = (PrivateKey) keystore.getKey(alias, null);

System.out.println("Private key: " + privateKey);

}

}

打印的结果

SunPKCS11-SJK1217 version 1.8

Provider : SunPKCS11-SJK1217

Type : PKCS11

Size : 0

获取到的KeyStore 的size为0,是什么原因? 国内这方面的资料好难搜索得到,有这方面的大牛 能帮忙解答一下么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值