1

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

        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");
4

1 回答 1

2

JAVA 允许在名为的安全策略文件中删除/排除密码套件,该文件java.security位于您JRE: $PATH/[JRE]/lib/security的策略文件中的jdk.tls.disabledAlgorithms属性控制 TLS 密码选择。jdk.certpath.disabledAlgorithms控制您将在 SSL 证书中遇到的算法。Oracle在此处提供了有关此的更多信息

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

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

于 2016-04-13T15:15:44.890 回答