编译OpenSSL 1.0.2h(含FIPS模块)时配置参数报错求助
解决OpenSSL 1.0.2h + FIPS 2.0.12编译参数错误问题
首先得明确:OpenSSL的config参数在不同小版本间存在差异,1.0.2h支持的参数和1.0.2n并不完全一致,这是你遇到报错的核心原因。下面是针对你的需求(满足Common Criteria要求,集成FIPS,禁用指定套件、仅保留TLS1.2)的修正方案:
一、先确保FIPS模块编译安装正确
你的FIPS编译逻辑没问题,但建议指定安装路径,避免后续OpenSSL查找模块时出错:
root@cc3:/home/openssl# tar -xvf openssl-fips-2.0.12.tar.gz root@cc3:/home/openssl# cd openssl-fips-2.0.12 root@cc3:/home/openssl/openssl-fips-2.0.12# ./config --prefix=/home/openssl/local/fips -d root@cc3:/home/openssl/openssl-fips-2.0.12# make && make install
二、修正OpenSSL主程序的编译参数
针对1.0.2h的参数兼容性,调整后的命令如下(关键调整见下方说明):
root@cc3:/home/openssl# tar -xvf openssl-1.0.2h.tar.gz root@cc3:/home/openssl# cd openssl-1.0.2h root@cc3:/home/openssl/openssl-1.0.2h# ./config fips \ --with-fipslibdir=/home/openssl/local/fips/lib \ no-ssl2 no-ssl3 no-tls1 no-tls1_1 \ no-camellia no-ecdh no-dhe no-dsa \ no-psk no-idea no-seed no-rc4 no-deprecated no-des \ --prefix=/home/openssl/local root@cc3:/home/openssl/openssl-1.0.2h# make depend && make && make install
参数调整核心说明:
移除/修正无效参数:
- 删掉
no-ecdhe:1.0.2h没有这个独立参数,ECDHE属于ECDH套件的分支,禁用no-ecdh会同时禁用ECDHE,刚好满足你的需求。 - 删掉
no-dh:添加此参数会触发编译报错,因为FIPS 2.0.12模块依赖DH核心算法(Common Criteria认证通常也允许基础DH算法),保留no-dhe即可禁用DHE密钥交换套件。 - 修正拼写错误:把
no-camelia改为正确的no-camellia。
- 删掉
精准控制协议版本:
除了禁用SSLv2/SSLv3,新增no-tls1 no-tls1_1来禁用TLS1.0和TLS1.1,确保仅保留TLS1.2(1.0.2h默认支持TLS1.2,无需额外开启)。明确FIPS模块路径:
添加--with-fipslibdir指定FIPS库的安装目录,避免OpenSSL自动查找时出现路径匹配问题。
三、编译后验证配置
安装完成后,用以下命令确认是否符合要求:
# 检查禁用的协议(无输出则说明已禁用) /home/openssl/local/bin/openssl ciphers -v | grep -E "(SSLv2|SSLv3|TLSv1|TLSv1.1)" # 检查禁用的套件(无输出则说明已禁用) /home/openssl/local/bin/openssl ciphers -v | grep -E "(ECDHE|DHE|DSA|DES|RC4|IDEA|SEED|CAMELLIA)" # 验证FIPS模式是否开启(输出应包含OPENSSL_FIPS=1) /home/openssl/local/bin/openssl version -f
四、额外优化建议
如果需要更严格的套件管控(比如仅保留Common Criteria认证的FIPS套件),可以修改/home/openssl/local/ssl/openssl.cnf,在[system_default_sect]中添加:
[system_default_sect] MinProtocol = TLSv1.2 CipherString = FIPS@SECLEVEL=2
这样运行时会强制使用符合FIPS安全等级2的套件列表。
内容的提问来源于stack exchange,提问作者Hussain Ali Akbar




