繁体   English   中英

Java安全性 - MSCAPI提供者:如何在没有密码弹出的情况下使用?

[英]Java security - MSCAPI provider: How to use without password popup?

我已经设法在我的应用程序中使用Sun的MSCAPI提供程序。 我现在遇到的问题是它总是弹出一个窗口,要求输入密码,即使我已经在代码中提供了密码。 这是一个问题,因为我需要在Web服务中使用加密功能。

这是我现在的代码:

String alias = "Alias to my PK";
char[] pass = "MyPassword".toCharArray();

KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, pass);
Provider p =  ks.getProvider();

Signature sig = Signature.getInstance("SHA1withRSA",p);
PrivateKey key = (PrivateKey) ks.getKey(alias, pass)

sig.initSign(key);
sig.update("Testing".getBytes());
sig.sign();

这工作得很好,但是当最后一行运行时,我会弹出一个要求输入密码的弹出窗口。 我该如何预防呢?

MSCAPI提供程序不支持向CAPI提供密码:

假定必须提供密码的应用程序支持兼容模式。 它允许(但忽略)非空密码。 默认情况下启用该模式。 (1)

要通过CAPI设置密码,必须使用未记录的KP_KEYEXCHANGE_PIN或KP_SIGNATURE_PIN调用CryptSetKeyParam ,并希望您的底层硬件令牌提供程序支持它。 (它们没有完全没有记录 - Windows CE和Windows Mobile的文档提到它们(2)并且它们包含在头文件中)。

我的猜测是Windows正在弹出弹出窗口。

使用“证书导入向导”再次导入密钥,但请确保不要在“密码”屏幕上选中以下选项。

[_]启用强大的私钥保护。 如果启用此选项,则每次应用程序使用私钥时都会提示您。

我解决了这个问题,设置提供者如下:

signeData = gen.generate(content, ks.getProvider());

哪里

ksKeyStore

genCMSSignedDataGenerator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM