“允许从本网站访问以下应用程序”提示 - Java


2

我正在运行Java 1.7.0_67-b01。我们有一个可以下载到浏览器中的小程序。用户第一次使用小应用程序时,通常会收到两个提示。第一个显示“你想运行这个应用程序”然后给出应用程序的名称,发布者和位置,然后声明“此应用程序将以无限制的访问运行......”在提示结束时,用户可以选择复选框以“不要再为来自发布商和上述位置的应用显示此信息”。点击复选框,然后点击RUN按钮将导致applet的证书被安装在Java控制面板可访问的区域中。

然后用户收到第二个提示:“允许从该网站访问以下应用程序?” 再次确定应用程序和发布者。并且出现以下声明:“该网站正在请求访问和控制上面显示的Java应用程序,只有在您信任该网站并知道该应用程序打算在该网站上运行时才允许访问。”再次有一个复选框:“不要再显示这个应用程序和网站。”

Oracle根据提示信息(“信任决定”)调用单击复选框并按下“允许按钮”或“运行”按钮的行为。如果您选择信任从特定网站运行的应用程序,则可以转到Java控制面板并单击“还原安全提示”按钮来撤销您的决定。

在环境中发生永久变化,但我不明白在哪里进行了更改。很明显,与提示中标识的网站相关的一些信息被存储,因为做出信任决定会导致提示消失。但它在哪里存储?我在浏览器(我正在使用IE9)和java的控制面板中查看。我确实发现证书本身存储在名为trusted.certs的文件中。它位于我的Windows 7计算机上Users \\ AppData \ LocalLow \ Sun \ Java \ Deployment \ security下。当我点击恢复安全提示按钮时,文件改变。当我作出响应第一个提示的可信决策时,它也会更新。但是,后者并非如此。有趣的是,如果我将trusted.certs文件复制到另一台机器,无论我对第一个提示做出的决定是否传送到第二台机器。这表明通过将trusted.certs文件部署到我的用户群中,我可以避免他们面临第一个安全提示的问题。

但是,数据存储与第二次提示相关的情况在这个时候仍然是个谜。如果有人对此提示有所了解,以及与此提示相关的可信决策相关数据的保存位置,我将不胜感激。

还有一种方法可以避免用户不得不作出信任决定吗?如果这是一个受保护的Intranet环境,那么应该有办法绕过JRE中繁琐的安全措施。

  0

简短的回答可能不是,不是真的,也不是,你不应该尝试和它搞砸,这是有原因的,特别是考虑到你要求不受限制地访问用户的电脑 20 9月. 142014-09-20 06:42:47

1

我从来没有找到JRE存储与第二个提示相关的数据的地方。但是这比在用户不方便做出信任决定或者不可能的情况下如何控制提示要重要得多。 Oracle通过使用称为规则集的东西,在其最新版本的JRE中解决了这个问题。我附上描述下面这些链接:

http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/deployment_rules.html

http://www.java.com/en/download/faq/release_changes.xml

下面是与我们的应用程序工作的样本规则集:

<ruleset version="1.0+"> 
    <rule> <!-- allow anything signed with company's public cert --> 
    <id location="http://10.190.65.254/myapp"> 
    </id> 
    <action permission="run"/> 
    </rule> 

<rule> 
    <id /> 
    <action permission="default"/> 
    </rule> 
</ruleset> 

我们打包规则在签名的jar设置并将其存入目录:

C:\Windows\Sun\Java\Deployment 

之后,不再提示。


1

就像答案指出的,为了摆脱第一个安全提示“你想运行这个应用程序”,请执行以下操作。

我不知道如何摆脱第二个提示,虽然说“允许从这个网站访问以下应用程序?”有谁知道如何摆脱这一个?

无论如何,对于提示1“你想运行这个应用程序”: 创建一个DeploymentRuleSet.jar文件(需要驻留在C:\ Windows \ Sun \ Java \ Deployment)如下。

创建一个名为ruleset.xml的文件并让它包含规则。示例文件可能是:

<ruleset version="1.0+"> 
    <rule> 
    <id> 
     <certificate algorithm="SHA-256" hash="A494E23EF3EF549DF2F5597AE8F9C1A329DE4E055A58B23DFAED4DDBF1ECA865" /> 
    </id> 
    <action permission="run" /> 
    </rule> 
</ruleset> 

(此文件中的证书的SHA256相匹配,这样任何与该证书签名的匹配规则,但你也可以使用URL或applet名称或诸如此类的东西)

现在下载您用来签署JAR文件的CA代码签名证书的副本。

如果你想知道证书哈希是什么,所以你知道要把什么放到ruleset.xml文件中,你可以使用这个命令来显示它,你只需要从输出中删除“:”标记SHA256证书指纹。此外,我们需要注意的关键别名(EG LE-codesigningv3-9f7e8e35-747f-41b3-a53f-542d8ee447e0):

keytool -list -v -keystore codeSigning.pfx -storetype PKCS12 

所以进入结果散列到ruleset.xml文件。记下别名。

在它创建具有ruleset.xml文件的jar文件:

jar -cvf DeploymentRuleSet.jar ruleset.xml 

标志的证书,这个jar文件 - 你需要知道密钥库的密码。更改别名(在命令的最后一个参数),以任何别名是在证书中,EG:

jarsigner -verbose -keystore codeSigning.pfx -storetype PKCS12 -signedjar DeploymentRuleSet.jar DeploymentRuleSet.jar le-codesigningv3-9f7e8e35-747f-41b3-a53f-542d8ee447e0 

这给你你需要的文件。