最直接方法是运行 openssl ciphers -v 'ALL:COMPLEMENTOFDEFAULT' | awk '{print $2}' | sort -u 查看支持的最低 TLS 版本,并用 openssl s_client -connect host:port -tls1_2/-tls1_3 测试实际握手结果。

怎么查当前麒麟系统启用的 TLS/SSL 协议版本
银河麒麟(Kylin)基于 Linux 内核,其系统级加密协议能力主要由 OpenSSL 库和内核 crypto API 共同支撑。但用户真正能“看到”的、影响应用通信安全的,是 OpenSSL 默认启用的 TLS 版本——不是内核支持什么就默认用什么,而是 OpenSSL 编译时的配置 + 运行时的策略共同决定。
最直接有效的方法是查 openssl 命令自身行为:
- 运行
openssl version -a确认 OpenSSL 版本(Kylin V10 SP1 默认为 1.1.1w,V11 多为 3.0.13;不同版本默认启用的 TLS 版本差异极大) - 用
openssl ciphers -v 'ALL:COMPLEMENTOFDEFAULT' | awk '{print $2}' | sort -u列出所有可用密码套件对应支持的最低 TLS 版本(注意:输出中TLSv1.2表示该套件仅在 TLS 1.2+ 可用,TLSv1.3表示仅限 1.3) - 更精准模拟实际连接:用
openssl s_client -connect baidu.com:443 -tls1_2和-tls1_3分别测试,观察是否握手成功、返回的Protocol字段值
/etc/ssl/openssl.cnf 是否控制协议开关
不直接控制。OpenSSL 3.0+ 已弃用全局配置文件中通过 MinProtocol/MaxProtocol 控制 TLS 版本的方式(Kylin V11 默认启用 OpenSSL 3.x,V10 SP1 多数仍为 1.1.1 系列)。即使你改了 /etc/ssl/openssl.cnf,对大多数应用(如 curl、wget、浏览器)也无效——它们调用的是 OpenSSL 的默认策略,而非读取该配置文件。
真正起作用的是:
- 应用自身的 TLS 设置(例如
curl --tlsv1.2或代码中设置SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION)) - 系统级策略文件(Kylin V11 启用
/etc/crypto-policies/config,内容为DEFAULT或FUTURE;执行update-crypto-policies --show可查看当前策略,它会间接约束 OpenSSL 行为) - 内核参数(极少影响 TLS 版本选择,但
sysctl net.ipv4.tcp_rmem等会影响 TLS 握手性能)
为什么 curl/wget 显示 TLSv1.3 却连不上老设备
因为协议协商是双向的:客户端宣布支持 TLS 1.3,不代表服务端必须用它。如果对方只支持 TLS 1.2,OpenSSL 会自动降级——但前提是客户端没强制锁定版本。
常见踩坑点:
-
curl -v https://old-server/显示* ALPN, offering h2和* ALPN, server accepted to use http/1.1—— 这说明 ALPN 协商成功,但 TLS 版本可能已是 1.2;要看* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384这一行 - 某些国产中间件(如东方通 TONGWEB)默认禁用 TLS 1.3,需手动在管理控制台开启;此时即使麒麟系统支持,也无法协商成功
- 使用
openssl s_client -connect host:port -tls1_3 -msg强制指定 TLS 1.3 后失败,不代表系统不支持,只说明对方不支持
应用开发时如何确保用上 TLS 1.2+
不能只依赖系统 OpenSSL 版本,必须在代码里显式设限。Kylin 系统自带的 Qt 5.15+、Java 11+、Python 3.9+ 默认已禁用 TLS 1.0/1.1,但旧版本或自编译环境仍可能开启。
关键检查点:
- Python:
ssl.create_default_context()默认启用 TLS 1.2+;若用ssl.SSLContext(ssl.PROTOCOL_TLS)(已弃用),则可能回落到 TLS 1.0 - Java:检查
java.security中jdk.tls.disabledAlgorithms是否含TLSv1, TLSv1.1;Kylin V11 预装 OpenJDK 17 默认已禁用 - C/C++:
SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION)是最稳妥写法,比SSLv23_method()(已废弃)可靠得多
最易被忽略的是:麒麟系统默认未禁用 TLS 1.0/1.1 的内核 crypto 模块(如 tls 内核模块),但这不影响用户态应用——只要 OpenSSL 和上层应用设了底线,底层模块是否加载无关紧要。

















