如何在 java 应用程序服务器中为 ssl 禁用弱密码套件

How to disable weak cipher suits in java application server for ssl

我有一个自定义 Java 应用程序服务器 运行。我看到服务器支持一些弱密码套装,例如一些 112 位密码。我想禁用那些。我在哪里可以穿那个。我还想启用 TLSv1.2。下面是初始化socket的代码

        KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(new FileInputStream(sslstore), sslstorepass.toCharArray());
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(ks, sslcertpass.toCharArray());

        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(kmf.getKeyManagers(), null, new SecureRandom());
        SSLServerSocketFactory ssf = sc.getServerSocketFactory();
        serverSocket = ssf.createServerSocket(port);

        System.out.println("Socket initialized");

JAVA 允许 removed/excluded 在名为 java.security 的安全策略文件中使用密码套件,该文件位于 JRE: $PATH/[JRE]/lib/security jdk.tls.disabledAlgorithms [=策略文件中的 25=] 控制 TLS 密码选择。 jdk.certpath.disabledAlgorithms 控制您将在 SSL 证书中遇到的算法。 Oracle 对此有更多信息 here

在安全策略文件中,如果您输入以下内容:jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 4096它会成功,因此永远不允许使用 MD5、SHA1、DSA,并且仅当密钥至少为 4096 时才允许使用 RSA位。

解决tls版本问题。只需要输入 SSLContext sc = SSLContext.getInstance("TLSv1.2"); 它将支持所有版本。