У меня есть апплет, который позволяет пользователям подписывать документы, используя свои личные сертификаты.Апплет уже подписан, но когда он пытается загрузить свое хранилище ключей, я получаю ошибку отказа в доступе, связанную с sunMSCAPI.Это вызвано следующими строками кода:
store = KeyStore.getInstance("Windows-MY");
store.load(null, null);
Из того, что я понимаю о подписывании апплета, нет никаких дополнительных шагов после процесса подписания, через которые мне нужно перейти (редактирование файлов политики и т.п.).Я попытался обернуть все функции апплета в:
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
etc...
Но это не помогло.Я нашел несколько комментариев на различных форумах о том, что sunMSCAPI доступен только в JDK 6 ... который у меня есть.У меня заканчиваются идеи, и любая помощь будет признательна.
Для потенциальной помощи, вот трассировка стека ошибки отказа в доступе:
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)