【问题标题】:How to install Unlimited Strength Jurisdiction Policy Files?如何安装无限强度管辖政策文件?
【发布时间】:2017-05-25 15:08:22
【问题描述】:

有人可以向我解释如何安装无限强度管辖政策文件。我从Oracle website 下载了 .jar 文件,但我在安装它们时遇到了问题。我正在制作的 Java 程序不断给我这个错误:

Jan 11, 2017 12:32:31 AM com.subgraph.orchid.TorClient start
INFO: Starting Orchid (version: 1.0.0)
Jan 11, 2017 12:32:31 AM com.subgraph.orchid.TorClient verifyUnlimitedStrengthPolicyInstalled
SEVERE: Unlimited Strength Jurisdiction Policy Files are required but not installed.
Exception in thread "main" com.subgraph.orchid.TorException: Unlimited Strength Jurisdiction Policy Files are required but not installed.
    at com.subgraph.orchid.TorClient.verifyUnlimitedStrengthPolicyInstalled(TorClient.java:208)
    at com.subgraph.orchid.TorClient.start(TorClient.java:79)
    at com.nikola.WebCrawlerApp.App$OrchidDemo.startOrchid(App.java:46)
    at com.nikola.WebCrawlerApp.App$OrchidDemo.access$000(App.java:38)
    at com.nikola.WebCrawlerApp.App.main(App.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

【问题讨论】:

  • 尝试使用web search 作为您问题的标题。替代方法:阅读您下载的 zip 文件中的 README 文件。因缺乏研究而投反对票。
  • 你是如何“安装”它们的?
  • 我没有尝试更改我当前的 JDK,而是安装了 Java JDK1.8.0_301,它为我解决了这个问题,因为安全文件已经在那里更新了......

标签: java maven jar


【解决方案1】:

对于 JDK 1.6,您可以通过以下方式进行:

private void hackJCE() throws Exception {
    try {
        if (Cipher.getMaxAllowedKeyLength("AES") < 256) {
            Field field = Class.forName("javax.crypto.SunJCE_b").
            getDeclaredField("g");
            field.setAccessible(true);
            field.set(null, false);
        }
    } catch (Exception e) {
        return;
    }
}

【讨论】:

    【解决方案2】:

    要以编程方式处理此问题,以下 Scala 代码将帮助您完成此操作。上面给出的代码不适用于 java 版本 8。你会得到一个错误。 错误 : 无法将静态最终布尔字段 javax.crypto.JceSecurity.isRestricted 设置为 java.lang.Boolean

    if (Cipher.getMaxAllowedKeyLength("AES") < 256) {
     try {
     var field=Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted")
        field.setAccessible(true)
       var modifiersField = classOf[Field].getDeclaredField( "modifiers" )
       modifiersField.setAccessible(true);
       modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
        field.set(null, java.lang.Boolean.FALSE)
      }
    
      catch{
        case ex:Exception=>throw ex
      }
    }
    

    【讨论】:

      【解决方案3】:

      2018-01-15 更新

      根据JDK-8170157,由于JDK 6u181、7u171、8u161、9b148默认启用无限加密策略。所以你所要做的就是升级到相应的基线。

      原答案

      Java 9Java 8u151 开始,不再需要下载和手动安装管辖政策文件。根据release notes

      在旧版本中,JCE 管辖文件必须单独下载和安装,以允许 JDK 使用无限制的加密。不再需要下载和安装步骤。要启用无限制加密,可以使用新的crypto.policy 安全属性。如果在 java.security 文件中设置了新的 Security 属性,或者在初始化 JCE 框架之前已使用 Security.setProperty() 调用动态设置,则该设置将受到尊重。默认情况下,该属性是未定义的。如果该属性未定义且旧版 JCE 权限文件不存在于旧版 lib/security 目录中,则默认加密级别将保持为受限。要将 JDK 配置为使用无限制加密,请将 crypto.policy 设置为值 unlimited。有关详细信息,请参阅随此版本提供的 java.security 文件中的说明。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,以上答案都没有为我工作,所以当我找到解决方案时,我决定在这里分享它以帮助其他人

        最后对我有用的只是download the Unlimited Strength Jurisdiction Policy Files from oracle website

        解压文件夹并将文件夹内的文件移动到 $JAVA_HOME\jre\lib\security 覆盖已经存在的同名文件

        将 JAVA_HOME 替换为您的 java 安装的实际 jdk 文件夹

        【讨论】:

        • 对我来说,文件也已经存在但仍然无法正常工作,按照您的建议替换文件帮助我解决了问题。
        【解决方案5】:

        在 $JAVA_HOME/jre/lib/security 中,编辑文件 java.security 并取消注释 crypto.policy=unlimited 行(它大约是 932 行文件的 823 行)。

        【讨论】:

        • 我的文件中没有此条目
        【解决方案6】:

        您需要确定您的 Java 主路径(通过 Java 中的 System.getenv("JAVA_HOME") 或命令行上的 $ echo $JAVA_HOME)。它应该是如下路径:

        • C:\Program Files\Java\jre8 在 Windows 上
        • /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home 在 Mac OS X 上
        • /usr/java/jdk1.8.0_101/bin/java 在 *nix 上

        然后您需要将下载的US_export_policy.jarlocal_policy.jar 文件复制到目录:&lt;JAVA_HOME&gt;/jre/lib/security 并覆盖现有的同名文件。

        2017 年 5 月 17 日更新

        以下代码(仅用于演示目的)将指示 JVM 允许使用 AES-256 位加密和相应的 TLS 密码,而不管安装的策略文件如何。 不建议使用此方法。

        if (Cipher.getMaxAllowedKeyLength("AES") < 256) {
          try {
            Field field = Class.forName("javax.crypto.JceSecurity").
            getDeclaredField("isRestricted");
            field.setAccessible(true);
            field.set(null, java.lang.Boolean.FALSE);
          } catch (Exception e) {
            fail("Could not override JCE cryptography strength policy setting");
            fail(e.getMessage());
          }
        }
        

        【讨论】:

        • 如果您希望您的应用程序是可移植的,并将它们作为库带来怎么办?有什么解决办法吗:)?
        • JVM 存在使用反射来覆盖安全检查的脆弱黑客,或者您可以将它们捆绑在安装程序包中,将它们安装到用户的 JRE 主页(这可能违反 Oracle 的 TOS,我不知道)不知道)。如果您希望您的应用程序真正可移植,请不要依赖存在的无限强度策略。 AES-128 目前仍然很强大。
        • 不幸的是,这还不足以达到我想要的目的stackoverflow.com/questions/44031398/…,我需要256-bit symmetric ciphers
        • 您可以破解 JVM 以使其相信它可以访问 256 位密码。完全免责声明:此代码仅用于演示;我不建议您这样做(请参阅更新的答案)。
        • 非常感谢您的努力。我正在使用 Java 1.8.0_121,但它不起作用我的意思是 if you try the code from my question on the link 它会产生相同的错误。似乎 Java 8 Update 121 不允许反射黑客。我看到的唯一希望是 Java 9。
        猜你喜欢
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-28
        • 2016-10-11
        • 2012-04-02
        • 2021-01-01
        相关资源
        最近更新 更多