首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java安全性- MSCAPI提供程序:如何仅从USB令牌检索证书

Java安全性- MSCAPI提供程序:如何仅从USB令牌检索证书
EN

Stack Overflow用户
提问于 2015-02-11 11:18:44
回答 1查看 1.4K关注 0票数 1

我已经设法在我的applet中使用了Sun的MSCAPI提供程序。

我的小应用程序只列出Windows证书存储中的证书,并允许用户通过选择他/她的首选证书来签署他/她的事务。

我想阻止用户在没有USB令牌/智能卡的情况下签名,这意味着如果证书的私钥没有存储在USB令牌/智能卡中,我的小程序就不会显示/列出证书。

我像这样检索证书(删除try catch块):

代码语言:javascript
复制
keyStore = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
keyStore.load(null);

enumeration = keyStore.aliases();
while(enumeration.hasMoreElements()) {
    String alias = (String) enumeration.nextElement();
    Certificate ksCertificate = keyStore.getCertificate(alias);

    ...
}

我像这样管理签名(删除了try catch块):

代码语言:javascript
复制
// Retrieve private key
privateKey = (PrivateKey) keyStore.getKey(alias, null);

// Sign data by using certificate's signing algorithm
Signature signer = Signature.getInstance(certificate.getSigAlgName(), keyStore.getProvider());

signer.initSign(privateKey);
signer.update(data);
result = signer.sign();

我找不到任何方法来区分证书是否来自USB标记。我检查了证书和PrivateKey对象,但是我没有找到任何对我有帮助的属性。

对于如何使用MSCAPI实现这一点,有什么建议吗?或者有任何建议作为MSCAPI的替代方案?

(我不/不能使用PKCS11的原因是需要在全球范围内支持多个品牌的令牌,并且要求小程序不应该为每个令牌维护内部的PKCS11 dll路径列表。从服务器端检索dll路径也不被接受。所以在这种情况下,我不能使用PKCS11。如果我错了,请纠正我。)

EN

回答 1

Stack Overflow用户

发布于 2021-03-06 18:39:33

我认为现在回复太晚了。

每个USB令牌提供商将为其令牌提供自定义的驱动程序。Ex.ePass或ProxKey都有自己的驱动程序。驱动程序(DLL/SO)文件的位置将不同。驱动程序的文件名也会有所不同。所以你不能在没有提到正确的驱动路径的情况下读取/初始化它们。你可以去找https://github.com/joelhockey/jacknji11

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28446008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档