【发布时间】:2014-05-19 01:45:04
【问题描述】:
我有一个需要 Internet 访问的 Java 应用程序,因为它通过 WebView JavaFX 组件嵌入了 Web 浏览器。
如果应用程序未打包在 Jar 中,则它可以毫无问题地执行。 但是,当打包在 Jar 中时,它无法再访问 Internet(例如,它无法加载所需的远程 Javascript 文件,例如 JQuery)。
我试图修复它签署 jar:
jarsigner myjar myalias
并且命令成功,尽管有以下警告:
警告:签名者证书将在六个月内过期。不 提供了 -tsa 或 -tsacert 并且这个 jar 没有时间戳。如果没有时间戳,用户可能无法在 签名者证书的到期日期 (2014-07-08) 或任何未来之后 撤销日期。
但是,应用程序仍然无法访问 Internet(嵌入式浏览器仍然无法加载远程脚本文件)。 我应该以其他方式签名吗?可能包括来自公认证书颁发机构的证书?
我还在我的~/.java.policy 文件中配置了如下权限:
keystore "file:<userpath>/.keystore", "jks";
grant signedBy "myalias" {
permission java.security.AllPermission;
};
我正在尝试使用 OSX 10.9.2 和 Java 1.8.0-b132
更新
事实证明,如果应用程序是否嵌入到 Jar 中,嵌入式浏览器的执行方式会有所不同,这超出了安全权限。
我不知道这是什么原因,但是如果您不知道,这可能会导致您得出各种错误的结论。可能是一个讨厌的错误。
例如,我观察到的一件事是,当没有打包在 Jar 中时,像这样开始嵌入网页效果很好:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
...
但是当打包在一个 Jar 中时,这给了我一些问题(可能是 xhtml1-strict 被强制执行)所以我不得不用一个简单的<html> 标签替换它。
这不是唯一不同的行为,而是给我带来问题的主要问题。
【问题讨论】:
-
定义“仍然无法访问 Internet”。会发生什么?
-
无法加载嵌入式浏览器所需的远程脚本。显示所有 html 内容并且 Javascript 工作。
-
Trusted-Library不适用于整个应用程序(顾名思义)。
标签: java security jar jar-signing