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

时间:2014-09-20 05:55:19

标签: java security applet

我正在运行Java 1.7.0_67-b01。我们有一个applet可以下载到浏览器中。通常,用户在第一次使用applet时会收到两个提示。第一个读取“是否要运行此应用程序”然后提供应用程序的名称,发布者和位置,然后指出“此应用程序将以不受限制的访问运行...”在提示结束时,用户可以选中一个复选框,“不要再显示发布商和上述位置的应用”。单击复选框,然后单击“运行”按钮将导致applet的证书安装在可从Java控制面板访问的区域中。

然后用户收到第二个提示:“允许从此网站访问以下应用程序?” 同样识别应用程序和发布者。并出现以下语句:“此Web站点正在请求访问和控制上面显示的java应用程序。仅当您信任该Web站点并且知道该应用程序要在此站点上运行时才允许访问。”再次有一个复选框:“不要再显示此应用和网站。”

Oracle调用单击复选框并按“允许按钮”或“运行”按钮的操作,具体取决于提示,即“信任决定”。如果您选择信任从特定网站运行的应用程序,则可以通过转到Java控制面板并单击“还原安全提示”按钮来撤消您的决定。

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

但是,存储与第二个提示相关的数据对我来说仍然是个谜。如果有人知道有关此提示的信息以及与此提示相关的可信决策相关数据的位置,我将不胜感激。

还有办法避免让用户做出信任决定吗?如果这是受保护的Intranet环境,则应该有一种方法可以绕过JRE中这种繁琐的安全设置。

3 个答案:

答案 0 :(得分: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)

就像答案所表明的那样,要摆脱第一个安全提示,说明&#34;你想运行这个应用程序&#34;请执行下列操作。

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

无论如何,对于提示1&#34;你想运行这个应用程序&#34;: 创建一个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文件中放入什么,您可以使用此命令来显示它,您只需要删除&#34;:&#34;来自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

这会为您提供所需的文件。

答案 2 :(得分:1)

因此可能是一个更简单的解决方案。我不断遇到障碍,试图使罐子签名,并遵循省略了关键步骤的指示等。最后我复制了文件夹

  

%userprofile%\ AppData \ LocalLow \ Sun \ Java \ Deployment \ cache \ 6.0

和文件

  

%userprofile%\ AppData \ LocalLow \ Sun \ Java \ Deployment \ security \ trusted.certs

从已经接受提示并编写简单脚本以在登录时对其进行自动复制的计算机上。

还添加了一些东西来禁用更新Java提示符。如果有人愿意,这里是脚本。另外,请复制文件夹,使结构如下所示: Directory Tree

LogonScript

::Paste this into a batch file and set it as logon script for AD account in profile, or put it in C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
::This was tested and works in Win7/Win10 with Java 8u201

mkdir "%userprofile%\appdata\LocalLow\Sun\Java\Deployment\cache\6.0"
mkdir "%userprofile%\appdata\LocalLow\Sun\Java\Deployment\security"
robocopy "\\%USERDNSDOMAIN%\NETLOGON\Software\Java Prompts\6.0" "%userprofile%\appdata\LocalLow\Sun\Java\Deployment\cache\6.0" /E
robocopy "\\%USERDNSDOMAIN%\NETLOGON\Software\Java Prompts\security" "%userprofile%\appdata\LocalLow\Sun\Java\Deployment\security" /E

::WIN 10 64 bit
reg add "HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Update\Policy\jucheck" /v NotifyInstall /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Update\Policy\jucheck" /v NotifyDownload /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Update\Policy\jucheck" /v EnableAutoUpdateCheck /t REG_DWORD /d 0 /f

::WIN 7 64 Bit
::reg add "HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Update\Policy" /v EnableJavaUpdate /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Update\Policy" /v NotifyDownload /t REG_DWORD /d 0 /f
reg add "HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Update\Policy" /v EnableAutoUpdateCheck /t REG_DWORD /d 0 /f

::WIN 7 32 Bit
reg add "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v EnableAutoUpdateCheck /t REG_DWORD /d 0 /f
::reg add "HKLM\SOFTWARE\JavaSoft\Java Update\Policy" /v EnableJavaUpdate /t REG_DWORD /d 0 /f