java.security.AccessControlException:拒绝访问(“java.security.SecurityPermission”“authProvider.SunMSCAPI”)

时间:2013-10-16 11:15:17

标签: java oracle security applet

直到早上我的小程序中一切正常。我接受了Java更新,一切都停止了。我正在使用applet处理数字证书。这是我的堆栈跟踪。我跟着一些oracle文章但没有用。

https://blogs.oracle.com/java-platform-group/entry/liveconnect_changes_in_7u45 http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/manifest.html#trusted_library http://www.oracle.com/technetwork/java/javase/7u45-relnotes-2016950.html

Java Plug-in 10.45.2.18
Using JRE version 1.7.0_45-b18 Java HotSpot(TM) Client VM
User home directory = C:\Users\vicky.thakor

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.plugin2.applet.AWTAppletSecurityManager.checkPermission(Unknown Source)
    at sun.security.mscapi.KeyStore.engineLoad(KeyStore.java:755)
    at sun.security.mscapi.KeyStore$MY.engineLoad(KeyStore.java:62)
    at java.security.KeyStore.load(Unknown Source)
    at SecurityApplet.initializeBrowserKeyStore(SecurityApplet.java:162)
    at SecurityApplet.isCertificateInstalled(SecurityApplet.java:268)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.Trampoline.invoke(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
    at sun.plugin2.liveconnect.JavaClass$MethodInfo.invoke(Unknown Source)
    at sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(Unknown Source)
    at sun.plugin2.liveconnect.JavaClass.invoke0(Unknown Source)
    at sun.plugin2.liveconnect.JavaClass.invoke(Unknown Source)
    at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(Unknown Source)
    at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(Unknown Source)
    at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

.java.policy文件我正在applet的public void init()方法中创建。它在访问applet中的任何内容之前。

grant
{
permission java.security.AllPermission;
permission java.io.FilePermission "<<ALL FILES>>", "read";
permission java.io.FilePermission "<<ALL FILES>>", "write";
permission java.util.PropertyPermission "*", "read, write";
permission java.util.PropertyPermission "user.home", "read";
permission java.util.PropertyPermission "user.dir", "read";
permission java.lang.RuntimePermission "modifyThread";
permission java.lang.RuntimePermission "*";
};

更新:2013年11月18日

即使使用代码签名证书也无法正常工作

enter image description here

3 个答案:

答案 0 :(得分:1)

我无法发表评论,所以我将此作为答案。

  1. 我相信在你的applet中创建.java.policy文件太晚了 - 在运行你的任何代码之前,插件已经启动并读取了策略文件。

  2. 您可以在applet上签名并使用jnlp文件在安全元素中分配权限

答案 1 :(得分:0)

我知道在这里回答还为时已晚,但是添加解决方案是因为我在这方面遇到了困难:

我的问题:在部署依赖于Bouncy Castle库的应用程序(WAR文件)时,我遇到了以下问题: `

cannot create instance of
org.bouncycastle.jcajce.provider.digest.GOST3411$Mappings
 java.security.AccessControlException: access denied
("java.security.SecurityPermission"
"putProviderProperty.BC")

`

这是我的工作,对我有用: 转到:{Installed JDK path}\jre\lib\security\ 打开文件java.policy

添加权限:permission java.security.SecurityPermission "putProviderProperty.BC";

重新启动程序以加载更改。

我还不了解它到底是如何工作的,或者仅仅更改java.policy文件是否安全(仍然在寻找实现这种配置的其他方法)。

请务必对此类更改采取预防措施。有关Oracle doc

的更多信息

答案 2 :(得分:0)

问题:

java.security.AccessControlException: access denied ("java.security.SecurityPermission" "authProvider.SunMSCAPI")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)

这是因为我们需要访问文件系统资源的权限,但是默认情况下,未签名的applet被拒绝此权限。因此,要克服此问题,必须对小程序进行签名。

您只需要对applet jar文件进行签名。

enter image description here