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

编译带FIPS模块的OpenSSL时,如何限制指定加密套件与旧TLS协议?

问题分析与解决办法

首先,咱们拆解你遇到的两个核心问题:编译参数未生效,以及如何选择性控制加密套件。

一、为什么你的编译参数没生效?

你当前的编译命令存在几个关键问题,导致禁用规则没起作用:

  1. TLS协议禁用参数不全
    OpenSSL 1.0.2h中,no-tls1仅禁用TLS 1.0,要禁用TLS 1.1需要额外加no-tls1_1——这就是为什么你还能使用TLSv1.1连接的原因。

  2. 加密套件禁用参数不完整且路径有误

    • 你用了no-dh,但这只是禁用静态DH算法,要禁用DHE(临时密钥交换的DH)需要加no-dhe;
    • 进入OpenSSL源码目录的命令写错了:cd /openssl-1.0.2h应该是cd ../openssl-1.0.2h(从FIPS目录退回上级再进入OpenSSL目录),否则会找不到源码目录,相当于没正确编译关联FIPS的版本;
    • 没有指定FIPS库的路径,导致OpenSSL编译时没正确加载FIPS模块的安全限制,很多禁用规则被忽略。
  3. 未清理旧编译残留
    如果之前编译过OpenSSL,旧的目标文件和配置会残留,新的编译参数可能不会覆盖生效,必须先执行make clean。

二、修正后的完整编译步骤

按以下步骤重新编译,确保所有限制生效:

1. 下载并解压源码(你的这部分是对的,保持不变)

root@cc3:/home/openssl# wget https://openssl.org/source/openssl-1.0.2h.tar.gz
root@cc3:/home/openssl# wget https://openssl.org/source/openssl-fips-2.0.12.tar.gz
root@cc3:/home/openssl# tar -xvf openssl-fips-2.0.12.tar.gz
root@cc3:/home/openssl# tar -xvf openssl-1.0.2h.tar.gz

2. 安装FIPS模块(默认安装到/usr/local/ssl/fips-2.0)

root@cc3:/home/openssl# cd openssl-fips-2.0.12 && ./config -d && make && make install

3. 编译带FIPS限制的OpenSSL

# 退回上级目录,进入OpenSSL源码目录
root@cc3:/home/openssl/openssl-fips-2.0.12# cd ../openssl-1.0.2h
# 清理旧编译文件
root@cc3:/home/openssl/openssl-1.0.2h# make clean
# 正确配置参数,指定FIPS库路径
root@cc3:/home/openssl/openssl-1.0.2h# ./config no-ssl2 no-ssl3 no-tls1 no-tls1_1 no-ecdhe no-dhe no-dsa no-des no-dh --prefix=/home/openssl/local --with-fipslibdir=/usr/local/ssl/fips-2.0/lib fips
# 重新生成依赖并编译安装
root@cc3:/home/openssl/openssl-1.0.2h# make depend && make && make install

三、验证配置是否生效

编译完成后,用以下命令验证:

  • 检查禁用的协议:

    /home/openssl/local/bin/openssl ciphers -V | grep TLSv1
    /home/openssl/local/bin/openssl ciphers -V | grep TLSv1.1
    

    如果没有输出,说明TLS 1.0和1.1已被禁用。

  • 检查禁用的加密套件:

    /home/openssl/local/bin/openssl ciphers 'ALL:eNULL'
    

    输出中不应包含任何ECDHE-、DHE-、DSA-、DES-、DH-开头的套件。

  • 用s_client测试协议限制:

    /home/openssl/local/bin/openssl s_client -connect example.com:443 -tls1
    

    应该返回类似Protocol not available的错误,说明TLS 1.0已无法使用。

四、选择性禁用AES/RSA套件(比如禁用AES256-SHA保留AES128-SHA)

编译时禁用整个AES/RSA算法是不可行的(会把所有相关套件都删掉),你需要通过加密套件字符串来精准控制,而不是编译参数:

  1. 编译时保留AES和RSA:确保编译命令中没有no-aes、no-rsa这类参数(你的当前命令本来就没加,所以没问题)。

  2. 使用时指定允许的套件:

    • 直接用openssl s_client测试:
      /home/openssl/local/bin/openssl s_client -connect example.com:443 -cipher 'AES128-SHA'
      
    • 如果是在应用程序(比如Nginx)中配置,设置ssl_ciphers指令:
      ssl_ciphers 'AES128-SHA:HIGH:!AES256-SHA:!ECDHE-*:!DHE-*';
      
    • 也可以修改OpenSSL的默认配置文件/home/openssl/local/ssl/openssl.cnf,在[default_conf]下添加:
      ssl_default_cipherlist = AES128-SHA:HIGH:!AES256-SHA:!ECDHE-*:!DHE-*
      
      这样所有使用该OpenSSL库的程序都会默认遵循这个套件规则。

内容的提问来源于stack exchange,提问作者Hussain Ali Akbar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:33:19