java - 在大型 Java 应用程序中,有没有办法确保只使用 TLSv1.2 或更高版本?

标签 java ssl https tls1.2

如果我正在与许多开发人员一起开发一个大型 Java 应用程序,并且在代码中有多种连接到 https 服务的方法,是否有一种相当简单的方法来强制他们都使用 TLS v1.2?

我尝试在测试应用程序中使用 -Dhttps.protocols=TLSv1.2-Djdk.tls.client.protocols=TLSv1.2,以及 httpclient很高兴使用 TLSv1 或 TLSv1.1。

或者,如果有一种直接的方法来记录 SSL 连接,使我能够弄清楚握手来自哪个调用,那也行得通,我可以在每个 gopher 出现时敲打它。不幸的是,启用 -Djavax.net.debug=ssl 只会向 STDOUT 输出大量信息,而且我没有简单的方法来跟踪给定的 *** ServerHello,TLSv1.1 到特定的服务器调用。

最佳答案

对于 Java8,TLSv1.2 默认启用,但 TLSv1 和 TLSv1.1 也可用。 限制出站连接使用TLSv1.2配置

 jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1

jre/lib/java.security

这将强制所有连接到 TLSv1.2,因此如果现有服务器不支持它,连接将失败。

通过下面的代码片段,您可以在不禁用的情况下检查它

Supported Protocols: 5
 SSLv2Hello
 SSLv3
 TLSv1
 TLSv1.1
 TLSv1.2
Enabled Protocols: 3
 TLSv1
 TLSv1.1
 TLSv1.2

禁用算法

Supported Protocols: 5
 SSLv2Hello
 SSLv3
 TLSv1
 TLSv1.1
 TLSv1.2
Enabled Protocols: 1
 TLSv1.2

使用它来打印 SSL 上下文

private static void printSSLContext() throws IOException, NoSuchAlgorithmException, KeyManagementException{
     SSLContext context = SSLContext.getInstance("TLSv1.2");
     context.init(null,null,null);

     SSLSocketFactory factory = (SSLSocketFactory)context.getSocketFactory();
     SSLSocket socket = (SSLSocket)factory.createSocket();

     String[] protocols = socket.getSupportedProtocols();

     System.out.println("Supported Protocols: " + protocols.length);
     for(int i = 0; i < protocols.length; i++) {
         System.out.println(" " + protocols[i]);
     }

     protocols = socket.getEnabledProtocols();

     System.out.println("Enabled Protocols: " + protocols.length);
     for(int i = 0; i < protocols.length; i++) {
         System.out.println(" " + protocols[i]);
     }

     String[] ciphers = socket.getSupportedCipherSuites();
     System.out.println("Enabled Ciphers: " + ciphers.length);
     for(int i = 0; i < ciphers.length; i++) {
         System.out.println(" " + ciphers[i]);
     }
    }

关于java - 在大型 Java 应用程序中,有没有办法确保只使用 TLSv1.2 或更高版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37548716/

相关文章:

.htaccess - 网站不断重定向到 HTTP

Java http(s) 客户端没有失败

docker - 入口 nginx digital ocean 上的 ssl 终止

java - 需要帮助了解证书链

java - parent sibling 的xpath

razor - 确保页面在 WebMatrix 中通过 HTTPS 提供

asp.net - HTTPS 停止与 IIS Express 配合使用

java - tomcat无法使用processbuilder启动外部进程

java - 如何从多个包创建单个 jar?

Windows 上的 Java 和环境变量