7

アプリケーションで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();

これはうまく機能していますが、最後の行が実行されたときにパスワードを求めるポップアップが表示されます。どうすればそれを防ぐことができますか?

4

3 に答える 3

5

MSCAPIプロバイダーは、CAPIへのパスワードの提供をサポートしていません。

互換モードは、パスワードを指定する必要があると想定するアプリケーションでサポートされています。null以外のパスワードを許可します(ただし無視します)。このモードはデフォルトで有効になっています。(1)

CAPIを介してパスワードを設定するには、文書化されていないKP_KEYEXCHANGE_PINまたはKP_SIGNATURE_PINを使用してCryptSetKeyParamを呼び出し、基盤となるハードウェアトークンプロバイダーがそれをサポートすることを期待する必要があります。(これらは完全に文書化されていないわけではありません。WindowsCEおよびWindows Mobileの文書にはそれらが記載されており(2)、ヘッダーファイルに含まれています)。

于 2009-01-30T15:00:27.550 に答える
0

私の推測では、Windows がポップアップを表示しているということです。

証明書のインポート ウィザードを使用してキーを再度インポートしますが、[パスワード] 画面で次のオプションをオンにしないでください。

[_] 強力な秘密鍵保護を有効にします。このオプションを有効にすると、秘密鍵がアプリケーションによって使用されるたびにプロンプ​​トが表示されます。

于 2009-01-30T13:31:59.007 に答える
-1

次のようにプロバイダーを設定してこの問題を解決しました。

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

どこ

ksでありKeyStore

genですCMSSignedDataGenerator

于 2014-04-30T18:12:47.820 に答える