You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Java 11中TLSv1.2支持的密码套件列表及实现代码?

Java 11中获取TLSv1.2支持的密码套件列表

一、通过Java代码列出TLSv1.2可用密码套件

完全可以编写Java代码获取Java 11中TLSv1.2支持的密码套件。Java的JSSE(Java安全套接字扩展)提供了对应API,可通过SSLContext获取指定协议支持的套件。

以下是可直接运行的示例代码:

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import java.util.Arrays;

public class TLSCipherSuites {
    public static void main(String[] args) throws Exception {
        // 初始化TLSv1.2版本的SSL上下文
        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, null, null);
        
        // 获取套接字工厂实例
        SSLSocketFactory socketFactory = sslContext.getSocketFactory();
        
        // 获取当前JSSE实现支持的所有密码套件
        String[] cipherSuites = socketFactory.getSupportedCipherSuites();
        
        // 过滤出仅适配TLSv1.2的套件(排除明确标记为低版本协议的套件)
        System.out.println("Java 11中TLSv1.2支持的密码套件:");
        Arrays.stream(cipherSuites)
              .filter(suite -> !suite.contains("_SSLv3_") && !suite.contains("_TLSv1_") && !suite.contains("_TLSv1.1_"))
              .forEach(System.out::println);
    }
}

代码说明:

  • getSupportedCipherSuites()返回的是当前Java环境支持的所有密码套件,其中部分套件可能同时兼容多个TLS版本,因此通过过滤排除标记为SSLv3、TLSv1.0、TLSv1.1的套件,即可得到TLSv1.2适配的套件列表;
  • 运行代码后会直接输出所有符合条件的密码套件名称。

二、通过OpenSSL查看密码套件(注意局限性)

你提到的openssl命令可以列出OpenSSL库支持的密码套件,但Java的JSSE实现与OpenSSL支持的套件并不完全一致——Java使用自身的加密库(如SunJSSE),和OpenSSL是相互独立的实现,两者的支持范围存在差异。

OpenSSL命令及中文输出示例:

执行命令:

openssl ciphers -V | head

翻译后的输出:

0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 密钥交换=ECDH     身份验证=RSA  加密=AESGCM(256) 消息认证码=AEAD
          0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 密钥交换=ECDH     身份验证=ECDSA 加密=AESGCM(256) 消息认证码=AEAD
          0xC0,0x28 - ECDHE-RSA-AES256-SHA384 TLSv1.2 密钥交换=ECDH     身份验证=RSA  加密=AES(256)  消息认证码=SHA384
          0xC0,0x24 - ECDHE-ECDSA-AES256-SHA384 TLSv1.2 密钥交换=ECDH     身份验证=ECDSA 加密=AES(256)  消息认证码=SHA384
          0xC0,0x14 - ECDHE-RSA-AES256-SHA    SSLv3 密钥交换=ECDH     身份验证=RSA  加密=AES(256)  消息认证码=SHA1
          0xC0,0x0A - ECDHE-ECDSA-AES256-SHA  SSLv3 密钥交换=ECDH     身份验证=ECDSA 加密=AES(256)  消息认证码=SHA1
          0x00,0xA5 - DH-DSS-AES256-GCM-SHA384 TLSv1.2 密钥交换=DH/DSS   身份验证=DH   加密=AESGCM(256) 消息认证码=AEAD
          0x00,0xA3 - DHE-DSS-AES256-GCM-SHA384 TLSv1.2 密钥交换=DH       身份验证=DSS  加密=AESGCM(256) 消息认证码=AEAD
          0x00,0xA1 - DH-RSA-AES256-GCM-SHA384 TLSv1.2 密钥交换=DH/RSA   身份验证=DH   加密=AESGCM(256) 消息认证码=AEAD
          0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 密钥交换=DH       身份验证=RSA  加密=AESGCM(256) 消息认证码=AEAD

注意事项:

如果需要确认Java实际运行环境中支持的密码套件,优先使用Java代码的方式,OpenSSL的结果仅作为参考,不能完全代表Java的支持情况。

内容的提问来源于stack exchange,提问作者PatS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:12:39