在Apache环境中配置国密(SM2)证书,关键在于理解它与传统RSA证书在信任体系和技术实现上的根本不同。国密证书遵循一套独立的密码体系,其信任链必须全程使用国密算法。因此,配置的核心要点在于构建这条完整的、自洽的信任链。
以下是确保国密证书链完整性配置的几个关键要点:
一、要点一:环境准备——构建国密兼容基础
Apache和OpenSSL官方版本不支持国密算法,这是导致配置失败的常见原因。
1. 升级OpenSSL:必须使用1.1.1及以上版本,且编译时需包含对SM2的支持。可通过 `openssl version -a` 检查输出中是否包含 `enable-sm2` 字样。
2. 重新编译Apache:需要使用支持国密的OpenSSL库(如 `GMSSL`或 `Wotrus SSL`)重新编译Apache。
二、要点二:证书文件准备——确保文件齐全
从CA机构获取证书时,通常会收到以下三个文件:
服务器证书文件 (`server.crt` 或 `your_domain.crt`)
私钥文件 (`server.key` 或 `your_domain.key`)
证书链文件 (`chain.crt` 或 `ca-bundle.crt`)
三、要点三:Apache配置——正确加载证书链
这是确保信任链完整性的核心步骤,也是最常见的配置错误点。
1. 合并证书链:将服务器证书和证书链文件(包含所有中间证书)合并为一个完整的PEM格式文件。
bash
cat server.crt chain.crt > fullchain.crt
2. 配置指令:在Apache的SSL配置文件中(通常是`httpd-ssl.conf`或`extra/httpd-ssl.conf`)进行如下配置:
`SSLCertificateFile`:指向合并后的完整证书链文件 `fullchain.crt`。
`SSLCertificateKeyFile`:指向私钥文件 `server.key`。
`SSLCertificateChainFile`:**此指令在Apache 2.4.8及以上版本已废弃**,不建议使用。只需确保`SSLCertificateFile`指向的文件已包含完整的证书链即可。
四、要点四:进阶实践——双证书部署
为解决国密浏览器(如360安全浏览器、红莲花浏览器)与主流浏览器(Chrome、Firefox)的兼容性问题,推荐使用SM2/RSA双证书部署方案。
实现方式:在同一443端口同时配置SM2和RSA两套证书,利用TLS握手中的ALPN(应用层协议协商) 扩展,根据客户端声明自动选择对应证书。
优势:国密浏览器使用SM2证书实现合规加密,而普通浏览器使用RSA证书确保正常访问,兼顾了合规性与普遍兼容性。
五、要点五:验证与测试
配置完成后,务必进行全面验证:
重启Apache:配置修改后,执行 `sudo systemctl restart httpd` 重启服务,并检查错误日志 `error_log`。
使用`openssl`测试:通过命令 `openssl s_client -connect your_domain.com:443 -showcerts` 检查返回的证书链是否完整。
浏览器访问测试:分别使用国密浏览器(验证国密通道)和普通浏览器(验证RSA兼容性)访问网站,确认均能正常建立安全连接。
六、常见问题与排查
问题:证书链加载失败
原因:OpenSSL版本不支持SM2,或`SSLCertificateFile`未包含完整证书链。
解决:升级至支持国密的OpenSSL,并确保正确合并了证书链文件。
问题:浏览器提示“不安全连接”
原因:浏览器不信任国密根证书,或仅部署了国密证书。
解决:使用国密浏览器访问;或部署SM2/RSA双证书方案。
问题:CSR申请失败
原因:使用了不支持SM2签名算法的旧版OpenSSL生成CSR。
解决:使用支持国密的OpenSSL版本(1.1.1+)生成CSR。
总而言之,Apache国密环境配置的核心在于构建一个完整的、端到端的国密信任链。这要求从底层环境(OpenSSL/Apache)、证书文件(完整链)到上层应用(双证书部署)都进行适配。遵循上述要点,可以有效规避常见问题,顺利完成国密证书的部署。