签名的Java代码在7.0 21更新后不起签名作用
我浏览过网络,尝试过很多东西,但都没有效果。首先,我不是Java大师,但我已经在这里完成了我的家庭作业,看起来它的签名是正确的,应该可以正常工作。这个应用程序是由其他人开发的,但我们有代码,在最新的Java版本之前,它一直运行良好。现在,它抛出了一个错误,该错误可以避免未签名。我们有一个GoDaddy证书,用于在build.xml中使用signjar对代码进行签名(我们使用的是Netbeans)。 有两个项目。一个用于访问串行端口以与电子秤通信(RXTXMyComm),另一个用于进行数据计算等(CWML)。RXTXSerial DLL还包括在名为RXTXSerial.native.jar的jar中 首先,我们使用以下build.xml编译并构建RXTX项目(parital以显示其签名方式): `签名的Java代码在7.0 21更新后不起签名作用,java,security,code-signing,Java,Security,Code Signing,我浏览过网络,尝试过很多东西,但都没有效果。首先,我不是Java大师,但我已经在这里完成了我的家庭作业,看起来它的签名是正确的,应该可以正常工作。这个应用程序是由其他人开发的,但我们有代码,在最新的Java版本之前,它一直运行良好。现在,它抛出了一个错误,该错误可以避免未签名。我们有一个GoDaddy证书,用于在build.xml中使用signjar对代码进行签名(我们使用的是Netbeans)。 有两个项目。一个用于访问串行端口以与电子秤通信(RXTXMyComm),另一个用于进行数据计算等(
构建、测试和运行项目RXTXCommMY。
`
这些JAR随后包含在CWML项目中,其构建如下:
`
`
jnlp如下所示:
`
缩放小程序
缩放小程序
`
我通过Janela验证器检查过了,没问题
它在Netbeans中运行并工作,在update 21之前工作良好。我还发现,如果我从jnlp中删除标记,它可以在IE和Java7.021中工作,但在Chrome中不起作用。当我在Chrome中运行Java控制台时,我得到以下信息:
`
加载gnu.io.RXTXCommDriver时引发的java.lang.ExceptionInInitializeError错误
线程“thread-15”java.lang.ExceptionInInitializeError中出现异常
位于cmwl.ioport.PortHelper.getAvailablePorts(PortHelper.java:49)
位于cmwl.ioport.PortHelper.connectSerialPorts(PortHelper.java:64)
运行(PortHelper.java:42)
原因:java.security.AccessControlException:拒绝访问(“java.util.PropertyPermission”“sun.arch.data.model”“读取”)
位于java.security.AccessControlContext.checkPermission(未知源)
位于java.security.AccessController.checkPermission(未知源)
位于java.lang.SecurityManager.checkPermission(未知源)
位于sun.plugin2.applet.AWTAppletSecurityManager.checkPermission(未知源)
位于java.lang.SecurityManager.checkPropertyAccess(未知源)
位于java.lang.System.getProperty(未知源)
位于gnu.io.CommPortIdentifier。(CommPortIdentifier.java:123)
... 3个以上
`
我进行了更详细的跟踪,结果显示三个罐子的证书都经过了验证。我不知所措,因为这给我们带来了大问题。正在调用的第123行是:
loadLibrary(“rxtxSerial.+System.getProperty(“sun.arch.data.model”);
任何帮助都将不胜感激。正如我所说,我根本不是Java爱好者,只是继承了这个应用程序。你的问题看起来就像我最近遇到的问题。原因似乎是在本机库加载过程中。尝试按如下方式重新编写初始化代码:
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
System.loadLibrary(...);
System.loadLibrary(...);
return null;
}
});
另外,我在清单中添加了Trusted Library:True,然后它告诉我我正在尝试以受信任的身份运行一个沙盒应用程序。谢谢!我试过了,但是当它试着做这个特权的时候,我仍然得到了一个错误。我猜这一定与它的签名方式有关,但我被难住了。
<target name="-post-jar">
<tstamp>
<format property="build.timestamp" pattern="yyyyMd_HmsS" />
</tstamp>
<filter token="build.timestamp" value="${build.timestamp}" />
<basename property="jarFilename" file="${dist.jar}" suffix=".jar" />
<signjar jar="${dist.jar}" storetype="pkcs12" storepass="MYPASS" alias="CWML's godaddy.com, inc. id" keystore="../CERTNAME.p12" signedjar="dist/${jarFilename}_v${build.timestamp}.jar" />
<delete file="${dist.jar}" />
<copy file="index.html" todir="dist" filtering="true" />
<copy file="cwml.jnlp" todir="dist" filtering="true" />
</target>
<?xml version="1.0" encoding="UTF-8"?>
<jnlp>
<information>
<title>Scale Applet</title>
<vendor>Scale Applet</vendor>
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version="1.7+" />
<jar href="CWML_v2013427_153155832.jar" main="true" />
<jar href="lib/RXTXCommMY.signed.jar?v=2013427_153155832" />
<nativelib href="lib/rxtxSerial.native.signed.jar?v=2013427_153155832" />
</resources>
<applet-desc name="ScaleApplet" main-class="cwml.ScaleApplet" width="200" height="40">
</applet-desc>
</jnlp>
java.lang.ExceptionInInitializerError thrown while loading gnu.io.RXTXCommDriver
Exception in thread "Thread-15" java.lang.ExceptionInInitializerError
at cmwl.ioport.PortHelper.getAvailablePorts(PortHelper.java:49)
at cmwl.ioport.PortHelper.connectSerialPorts(PortHelper.java:64)
at cmwl.ioport.PortHelper.run(PortHelper.java:42)
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "sun.arch.data.model" "read")
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 java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:123)
... 3 more
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
System.loadLibrary(...);
System.loadLibrary(...);
return null;
}
});