我正在运行自定义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");
答案 0 :(得分:2)
JAVA允许在名为java.security
的安全策略文件中删除/排除使用密码套件,该文件位于JRE: $PATH/[JRE]/lib/security
策略文件中的jdk.tls.disabledAlgorithms
属性控制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");
它将支持所有版本。