无法使用Java 7u21启动applet

所以我们安装了Java 7u21版本,该版本应该会加强applet的安全性。 不幸的是,它收紧了很多,以至于我们的applet不再运行了。 不好。

有趣的是,它只在我们使用JWS操作时才停止工作。 如果我们从标准网页将其作为标准applet启动,一切正常。

在JWS模式下,我们至少会遇到reflection和java.lang.Thread.setDefaultUncaughtExceptionHandler安全问题。

证书看起来不错。

来自Oracle的发行说明没有提供与JWS相关的任何内容的大量输入。

因此,我对社区的问题是:是否有人有想法或(甚至更好)解决这个问题?

与给定建议/评论相关的其他信息:

这个小程序由全球数百个第三方客户运行,因此不幸的是,更改安全策略是不可取的。 该问题对于客户来说是可重现的。 但我可以确认更改策略文件可以解决问题。

当我从Eclipse启动的Tomcat运行applet时(因此当然没有签名的applet),它会按预期在浏览器中显示警告通知。 作为一个容易上当的人,我允许applet运行,因为它是从我自己的开发环境启动的。 这仍然会导致安全性失败。

我已经考虑过,如果这是Java中的错误,但我想看看是否有其他人看到同样的问题。 我想我们都知道Oracle修复bug的周转时间并不总是最好的……

感谢您的任何意见。


非常感谢Tony,你的建议让我能够在7u21中创建applet,正确地说; 我认为这是一个向前的步骤,我正在通过浏览器签署和唤醒许多小程序,这些超过7u21。 我今天早些时候不想这样做。 但是我被困了好几个小时,事实上我还没有从我的遗留应用程序中唤醒我的第一个第三方applet(即在JVM 1.6或更老版本中工作正常)。

涉及的applet,我签了他们,但我总是得到错误:SecurityException – “Bad applet class name”。 我有一些applet和html代码调用它们,问题是我的第一个applet链(在调用链中没有任何其他)可能不像其他签名的applet那样正在做(这些applet来自java网站进行培训),这个第3方applet简单不运行并抛出上面提到的exception。 我的第三部分applet我不知道它在内部做了什么。 对不起,如果没有源代码,我可能会要求一个不易解决的特殊情况,但是,无论如何,请相信告诉我任何想法。

最好的祝福

这是解释它的页面。

关于混合代码的Oracle代码

您需要做的是让所有的jar都在清单文件中获取新的TrustedLibrary行。 对我来说,这意味着重新编译旧代码。 你可能只是解开当前的jar子,然后重新加入包括TrustedLibrary线。

您还必须签署所有代码。 不只是小程序。 这意味着如果你有3个jar子,那么所有3个jar子里的所有代码也必须签名。

我的同事破解了它。 给波兰人提供伏特加有时可以产生所需的灵感。 🙂

无论如何,似乎现在在发送到applet的jnlp信息中需要安全标记(返回的内容类型设置为application / x-java-jnlp-file)。

通过增加

    

有用。

希望这可以帮助。

Java SE文档的Security页面中的以下引用是相关的:

“标准的java策略文件可用于增强授予不受信任的应用程序的权限。除了$JRE_HOME/lib/security/java.policy$USER_HOME/.java.policy (由所有java程序使用),应用程序和applet由Java Web Start和Java Plug-in加载的另外两个策略文件,其位置可由部署配置属性配置:deployment.user.security.policy和deployment.system.security.policy。

检查这些位置中的策略文件。

使用未签名applet的所有开发人员的附加提示。 上周在JAX2013会议上,来自Oracle的Wolfgang Weigand提到,在2013年10月Java 7发布之后,将只有最高级别的applet安全滑块,即只有使用可信(非自签名)证书签名的applet才能运行。 截至目前,此信息尚未在官方Oracle网站上发布。

由于Java平台中的最新安全性更改,上面引用JAVA6安全页面的答案可能有点过时