ユーザーが個人証明書を使用してドキュメントに署名できるアプレットがあります。アプレットはすでに署名されていますが、キーストアを読み込もうとすると、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)