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

C++ OpenSSL密码套件配置问题:移除指定套件及末尾255编码排查

解决OpenSSL密码套件配置的两个问题:移除指定套件与末尾255编码的处理

一、正确移除指定密码套件的方法

你之前用-符号尝试移除套件却没成功,核心原因是没搞清楚OpenSSL密码套件字符串里-和!的区别:

  • -套件名:只是从当前启用的套件列表中临时移除,但该套件仍属于OpenSSL的可用集合,若后续有其他规则触发,可能还会被重新加入。
  • !套件名:完全禁用该套件,无论任何场景都不会出现在最终的套件列表里,这才是彻底移除的正确姿势。

另外还要注意两个配置函数的分工:

  • SSL_set_ciphersuites:仅负责配置TLS 1.3的密码套件,对TLS 1.2及以下版本的套件不起作用。
  • SSL_set_cipher_list:专门处理TLS 1.2及更早版本的套件配置。

如果需要同时管控不同TLS版本的套件,要分别调用这两个函数。比如你要移除TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,正确写法应该是:

// 配置TLS 1.3套件并排除指定项
SSL_set_ciphersuites(ssl, "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:!TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256");
// 配置TLS 1.2及以下套件(按需调整)
SSL_set_cipher_list(ssl, "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:!ECDHE-ECDSA-CHACHA20-POLY1305");

二、末尾出现编码255的原因与解决方法

你看到的编码255对应的是TLS_EMPTY_RENEGOTIATION_INFO_SCSV,它不是真正的密码套件,而是OpenSSL自动添加的一个安全重协商标记。这个标记的作用是告知服务器:客户端支持安全的TLS重协商机制,规避旧重协商流程的漏洞。

为什么会自动出现?

OpenSSL默认会在密码套件列表末尾自动注入这个SCSV,哪怕你完全没手动配置它。它不会影响实际的加密握手(服务器不会选择它作为加密套件),但会出现在你输出的套件列表里。

移除它的方法

如果你的业务场景严格要求列表中不能有这个标记,可以通过禁用TLS重协商的选项来实现:

// 在创建SSL对象后,设置禁用重协商的选项
SSL_set_options(ssl, SSL_OP_NO_RENEGOTIATION);

设置后,OpenSSL就不会再把这个255的SCSV添加到套件列表中了。需要注意的是,禁用重协商后,已建立的TLS连接无法再进行重协商操作,如果你的业务不需要这个功能,这个设置是完全安全的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:17:32