Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不清楚OpenJDK安全配置中需要进行哪些更改才能允许IcedTea Web使用库_Java_Java Web Start_Icedtea_Icedtea Web - Fatal编程技术网

Java 不清楚OpenJDK安全配置中需要进行哪些更改才能允许IcedTea Web使用库

Java 不清楚OpenJDK安全配置中需要进行哪些更改才能允许IcedTea Web使用库,java,java-web-start,icedtea,icedtea-web,Java,Java Web Start,Icedtea,Icedtea Web,短版: 是否需要将策略添加到OpenJDK JREjava.policy,以便在IcedTea Web的默认安装中使用JCE加密库?这是某种虫子吗 长版本: 我通过WebStart加载了这个Swing应用程序,我正试图使用OpenJDK8(RedHat、AdoptOpenJDK或Coretto变体)+IcedTea WebStart(从下载)。我的Swing应用程序除了一个面板外,其他所有功能都正常工作 我得到一些存储在某处的加密文本,并使用以下方法将其解密以显示在文本字段中: public s

短版:

是否需要将策略添加到OpenJDK JRE
java.policy
,以便在IcedTea Web的默认安装中使用JCE加密库?这是某种虫子吗

长版本:

我通过WebStart加载了这个Swing应用程序,我正试图使用OpenJDK8(RedHat、AdoptOpenJDK或Coretto变体)+IcedTea WebStart(从下载)。我的Swing应用程序除了一个面板外,其他所有功能都正常工作

我得到一些存储在某处的加密文本,并使用以下方法将其解密以显示在文本字段中:

public synchronized static String decrypt(String toDecrypt, byte[] key) {
    Key keySpec = new SecretKeySpec(key, "AES");
    try {
        CIPHER.init(Cipher.DECRYPT_MODE, keySpec);
        return new String(CIPHER.doFinal(toBytes(toDecrypt)));
    }
    catch (Exception e) {
        throw new RuntimeException(e);
    }
}
完成此过程的面板会在加载时解密,但无法加载到RedHat OpenJDK(我想是v1.7)中包含的IcedTea web中,错误是:

 at javax.crypto.Cipher.getInstance(Cipher.java:539)  Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES 
    ... 45 more 
    Caused by: java.lang.RuntimeException: java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
我在Linux和Windows上安装了OpenJDK,它说可用的提供程序有所不同

对于Windows:

  • SunPCSC版本1.8
  • XMLDSig版本1.8
  • SunSASL版本1.8
  • SUNJGS1.8版
  • SunJSSE版本1.8
  • SunEC版本1.8
  • SunRsaSign版本1.8
  • SUN版本1.8
对于linux:

  • SUN版本1.8
  • SunRsaSign版本1.8
  • SunEC版本1.8
  • SunJSSE版本1.8
  • SunJCE 1.8版
  • SUNJGS1.8版
  • SunSASL版本1.8
  • XMLDSig版本1.8
  • SunPCSC版本1.8
所以,它似乎缺少JCE

我尝试了上一个可用的IcedTeaWeb(v1.8),默认情况下,它们都配置了完整的提供程序列表:

security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI
安全策略也是无限的

# Note: This property is currently used by the JDK Reference implementation.
# It is not guaranteed to be examined and used by other implementations.
#
crypto.policy=unlimited
但他们似乎缺少WebStart的权限,因为我可以从IntelliJ(无WebStart环境)解密并打开运行应用程序的面板

最后,仅在上一个IcedTea WebStart版本(v1.8)中,我在加载面板时收到了一条额外的错误消息:

Denying permission: ("java.lang.RuntimePermission" "loadLibrary.sunmscapi")
Denying permission: ("java.security.SecurityPermission" "putProviderProperty.SunJCE")
这让我尝试在
java.policy

permission java.security.SecurityPermission "putProviderProperty.SunJCE";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.internal.spec";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.rsa";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.internal.interfaces";
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.util";

这样,我的应用程序终于可以运行了。但是,由于这在任何地方都没有文档记录,这样配置是否正确?我是否正在设置不安全的配置?这是应该在OpenJDK中修复的吗?谢谢。

这取决于应用程序的安全设置。它是在沙箱、j2ee应用程序客户端权限还是所有权限中运行?@sclassen如何为WebStart应用程序设置它?这取决于应用程序的安全设置。它是在沙箱、j2ee应用程序客户端权限还是所有权限中运行?@sclassen如何为WebStart应用程序设置这些权限?