2011-06-28 25 views
1

我有一个小程序,允许用户使用其个人证书签署文档。小程序已经签名,但是当它尝试加载密钥库时,我得到了与sunMSCAPI相关的访问被拒绝错误。它被引起的以下几行代码:如何在小程序中使用MSCAPI加载密钥库

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

看来,我是用对Applet签名密钥库是无效的莫名其妙。我生成了一个新的,签名的,清除了java缓存,并且一切都开始正常工作。

为了完整起见,这里是我跑,生成新的存储命令:

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

如果任何人有过这个问题,希望上面的帮助。

相关问题