Как я могу использовать MSCAPI внутри апплета для загрузки хранилища ключей - PullRequest
1 голос
/ 28 июня 2011

У меня есть апплет, который позволяет пользователям подписывать документы, используя свои личные сертификаты.Апплет уже подписан, но когда он пытается загрузить свое хранилище ключей, я получаю ошибку отказа в доступе, связанную с 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)

1 Ответ

1 голос
/ 29 июня 2011

Кажется, что хранилище ключей, которое я использовал для подписи апплета, было каким-то образом недействительным. Я сгенерировал новый, подписал его, очистил кеш Java, и все стало хорошо работать.

Для полноты картины я выполнил команду для создания нового хранилища:

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

Если у кого-то еще возникла эта проблема, надеюсь, это поможет.

...