Java 限制JRE级别上的密码套件

Java 限制JRE级别上的密码套件,java,jce,Java,Jce,我们的Java应用程序公开了许多由SSL/TLS保护的不同接口(SMTP、FTP、HTTP)。现在的目标是限制这些接口上允许的密码套件只包括“强”密码套件。我已经有了一个列表,很清楚如何让它为特定的套接字工作 socket.setEnabledCipherSuites(ENABLED_SECURE_CIPHER_SUITES); 或用于Tomcat连接器 <Connector port="443" ciphers="..."/> 问题是在应用程序中已经有5个地方我应该手动应

我们的Java应用程序公开了许多由SSL/TLS保护的不同接口(SMTP、FTP、HTTP)。现在的目标是限制这些接口上允许的密码套件只包括“强”密码套件。我已经有了一个列表,很清楚如何让它为特定的套接字工作

socket.setEnabledCipherSuites(ENABLED_SECURE_CIPHER_SUITES);
或用于Tomcat连接器

 <Connector port="443" ciphers="..."/>

问题是在应用程序中已经有5个地方我应该手动应用此限制。公共SocketFactory似乎没有帮助,因为向第三方API或框架提供自定义SocketFactory并不总是可行的。是否可能在JRE级别引入此限制,例如使用JCE提供程序配置或策略文件


JRE:oraclejre 1.7.0_17

好吧,我设法让它工作起来了。感谢EJP指出了正确的方向。 自Java 1.7以来,$JRE_HOME/lib/security/Java.security中还有两个附加属性:

jdk.certpath.disabledAlgorithms=MD2
控制认证路径构建和验证的算法

jdk.tls.disabledAlgorithms=MD5, SHA1, RC4, RSA keySize < 1024
jdk.tls.disabledAlgorithms=MD5、SHA1、RC4、RSA密钥大小<1024

SSL/TLS处理的JVM范围内的算法限制,我正在寻找的。这里的符号非常明显;可以禁止某些算法或限制密钥大小。Oracle JRE 7、Open JRE 7和(令人惊讶的)定义“strong”都支持这两个属性。Java已经限制了启用的密码套件。您知道吗?这个问题与特定密码的强度无关。我有一个固定的允许密码列表,我不能更改它。例如,根本不允许使用RC4。因此,默认的Java限制是不够的。我还检查了网络属性,但没有发现与密码套件相关的属性。请参阅JSSE参考指南。