如何配置OpenSSL使其同时支持curl、自定义GOST引擎与TLSv1.0
同时配置OpenSSL GOST引擎与TLSv1.0的生效方案
配置核心误区
调试过程中配置无法同时生效的核心原因是OpenSSL全局openssl_conf只支持单一入口根段:
- 单独启用TLSv1.0的配置方案中,根段指向
openssl_init挂载了SSL安全级别配置,但注释掉了GOST引擎的配置挂载链,导致引擎配置完全未被加载 - 如果切回传统的
openssl_def根段挂载GOST引擎配置,又缺少SSL安全级别降级的分支,会被OpenSSL 1.1+版本默认SELEVEL=2的策略拦截TLSv1.0连接
两者不兼容的本质是没有把所有需要的配置分支挂载到同一个根入口下。
正确的openssl.cnf配置片段
把所有配置分支统一挂载到openssl_init根段下,不需要保留单独的openssl_def段,完整结构参考:
# 全局单一入口指向openssl_init openssl_conf = openssl_init # 此处保留openssl.cnf的原有默认配置内容 # 根段下同时挂载两个配置分支:SSL策略 + 引擎列表 [openssl_init] ssl_conf = ssl_sect engines = engine_section # SSL策略分支:降级安全级别放开TLSv1.0 [ssl_sect] system_default = system_default_sect [system_default_sect] CipherString = DEFAULT@SECLEVEL=1 # 如需显式放开TLS版本范围,可以追加配置(非必须,SECLEVEL=1默认支持TLS1.0) # MinProtocol = TLSv1.0 # 引擎配置分支:加载GOST自定义引擎 [engine_section] gost = gost_section [gost_section] engine_id = gost dynamic_path = /usr/lib/aarch64-linux-gnu/engines-1.1/gost.so default_algorithms = ALL CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet # 加载后自动初始化引擎,避免引擎加载后未生效 init = 1
生效校验方法
- 执行
openssl engine -t gost,如果输出显示GOST引擎状态为Available,说明引擎配置被正确加载 - 执行
curl -v --tlsv1.0 https://对应测试地址,如果日志显示TLS握手成功,同时协商到GOST系列加密套件,说明两个配置已经同时生效
常见排错点
- 检查
dynamic_path的路径是否和系统实际的gost.so文件路径一致,aarch64、x86架构的引擎路径会有差异,路径写错会导致引擎加载失败 - 确认OpenSSL版本和引擎编译版本匹配,OpenSSL 1.1.x的引擎无法在3.x版本上直接复用
- 如果SELEVEL=1仍拦截TLSv1.0,可以显式在
system_default_sect段追加MinProtocol = TLSv1.0覆盖默认协议限制
内容的提问来源于stack exchange,提问作者Violet Wagner
相关产品推荐
相关产品推荐

