1

ユーザーが個人証明書を使用してドキュメントに署名できるアプレットがあります。アプレットはすでに署名されていますが、キーストアを読み込もうとすると、sunMSCAPIに関連するアクセス拒否エラーが発生します。これは、次のコード行が原因で発生しています。

store = KeyStore.getInstance("Windows-MY");
store.load(null, null);

アプレットの署名について私が理解していることから、署名プロセスの後にジャンプする必要のある追加の手順はありません(ポリシーファイルの編集など)。すべてのアプレット機能を次のようにラップしてみました。

AccessController.doPrivileged(new PrivilegedAction() {
  public Object run() {
    etc...

しかし、それは役に立ちませんでした。私は根付いて、さまざまなフォーラムで、sunMSCAPIはJDK6でのみ利用可能であるというコメントを見つけました...私が持っているものです。アイデアが足りなくなったので、助けていただければ幸いです。

潜在的な支援として、アクセス拒否エラーのスタックトレースを次に示します。

java.security.AccessControlException: access denied (java.security.SecurityPermission authProvider.SunMSCAPI)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at sun.security.mscapi.KeyStore.engineLoad(KeyStore.java:736)
    at sun.security.mscapi.KeyStore$MY.engineLoad(KeyStore.java:43)
    at java.security.KeyStore.load(Unknown Source)
    at com.bloop.signature.PKCS11.loadKeyStore(PKCS11.java:42)
    at com.bloop.signature.PKCS11.sign(PKCS11.java:29)
    at com.bloop.signature.applet.SignApplet.signDocument(SignApplet.java:103)
    at com.bloop.signature.applet.SignApplet.access$200(SignApplet.java:19)
    at com.bloop.signature.applet.SignApplet$1.run(SignApplet.java:64)
    at java.lang.Thread.run(Unknown Source)
4

1 に答える 1

1

アプレットに署名するために使用していたキーストアがどういうわけか無効だったようです。新しいものを生成し、それに署名し、Javaキャッシュをクリアすると、すべてが正常に機能し始めました。

完全を期すために、新しいストアを生成するために実行したコマンドは次のとおりです。

keytool -genkey -alias keyPair -keyalg RSA -validity 500 -keystore myKeyStore -keypass <password> -storepass <password> -dname "<CN,OU,O,L,ST,C details>"

他の誰かがこの問題を抱えている場合は、うまくいけば上記が役立つでしょう。

于 2011-06-29T18:26:21.813 に答える