Java 如何将不支持的密码套件(不包括在默认密码套件中)添加到客户端hello消息

Java 如何将不支持的密码套件(不包括在默认密码套件中)添加到客户端hello消息,java,Java,要求客户应支持以下TLS加密密码套件: private String[] cipherSuites = new String[] { "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", "TLS_DHE_RSA_WITH_AES_256_CBC_SHA ", "TLS_RSA_WITH_AES_256_GCM_

要求客户应支持以下TLS加密密码套件:

  private String[] cipherSuites = new String[] {
          "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
          "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
          "TLS_DHE_RSA_WITH_AES_256_CBC_SHA ",
          "TLS_RSA_WITH_AES_256_GCM_SHA384",
          "TLS_RSA_WITH_AES_256_CBC_SHA256",
          "TLS_RSA_WITH_AES_256_CBC_SHA",
          "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
          "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
          "TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
          "TLS_RSA_WITH_AES_128_GCM_SHA256",
          "TLS_RSA_WITH_AES_128_CBC_SHA256",
      };
这是主要代码:

public static void main(String []args) throws IOException {
        Hashtable<String, String> env = new Hashtable<>();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://10.159.218.169:636/ou=LDAPConfData,ou=Nokia,dc=solution,dc=com");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "uid=username,ou=People,dc=solution,dc=com");
        env.put(Context.SECURITY_CREDENTIALS, "123456");
        env.put(Context.SECURITY_PROTOCOL, "ssl");
        env.put("java.naming.ldap.factory.socket", CustomSocketFactory.class.getName());

        try {
            InitialDirContext context = new InitialDirContext(env);
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
运行主代码时,会出现异常: 根异常为java.lang.IllegalArgumentException:无法支持TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 WITH当前安装的提供程序

支持的密码套件大小为56,但其中只有四个需要密码。
是否有解决这个问题的办法?非常感谢。

这个问题是由美国密码出口限制引起的。默认情况下,不能使用密钥大小为256位的密码

由于少数国家政府的进口管制限制,装运的辖区政策文件规定可以使用“强”但有限的加密技术。这些文件的“无限强度”版本表明,对于居住在符合条件的国家(大多数国家)的人,密码强度没有限制。但只有“强势”版本才能输入那些政府强制实施限制的国家。JCE框架将强制执行已安装的辖区策略文件中指定的限制

要禁用这些限制,您需要

  • 下载

  • 找到并更改为jre/lib/security目录

  • 删除local_policy.jar和US_export_policy.jar

  • 将JCE无限强度jar文件放入


    • 这个问题是由美国密码出口限制引起的。默认情况下,不能使用密钥大小为256位的密码

      由于少数国家政府的进口管制限制,装运的辖区政策文件规定可以使用“强”但有限的加密技术。这些文件的“无限强度”版本表明,对于居住在符合条件的国家(大多数国家)的人,密码强度没有限制。但只有“强势”版本才能输入那些政府强制实施限制的国家。JCE框架将强制执行已安装的辖区策略文件中指定的限制

      要禁用这些限制,您需要

      • 下载

      • 找到并更改为jre/lib/security目录

      • 删除local_policy.jar和US_export_policy.jar

      • 将JCE无限强度jar文件放入


      谢谢您的回答,但我们无法更换jar软件包,您知道其他解决方案吗?jre1.8只能支持128位密钥,如何使其支持256位密钥?除了替换这两个文件local_policy.jar和US_export_policy.jar之外,请提前感谢。使用无限权限文件是唯一正确的方法。但是,对于您的问题,您应该看看感谢您的回答,但是我们不能替换jar包,您知道其他解决方案吗?jre1.8只能支持128位密钥,如何使其能够支持256位密钥?除了替换这两个文件local_policy.jar和US_export_policy.jar之外,请提前感谢。使用无限权限文件是唯一正确的方法。但是,对于您的问题,您应该看看jre1.8只能支持128位密钥,如何使它能够支持256位密钥?除了替换这两个文件local_policy.jar和US_export_policy.jar,提前感谢JRE1.8只能支持128位密钥,如何使其能够支持256位密钥?除了替换这两个文件local_policy.jar和US_export_policy.jar之外,请提前感谢
        @Override
        public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
          SSLSocketFactory sslFact = (SSLSocketFactory)SSLSocketFactory.getDefault();
          SSLSocket sslSocket = (SSLSocket) sslFact.createSocket(host, port);
          sslSocket.setEnabledCipherSuites(cipherSuites);
          return sslSocket;
        }