官方版  Apache  搭配官方版  OpenSSL  确实无法直接支持国密算法。核心原因是  Apache  的  `mod_ssl`  模块依赖  OpenSSL  提供加密能力,而官方  OpenSSL  过去默认不包含国密算法实现。

要解决这个问题,主要有以下几种方案:

一、方案一:替换为国密增强版OpenSSL(最推荐)

这是最核心、最彻底的解决方案:将系统或Apache依赖的OpenSSL,替换为支持国密算法的增强版本,并重新编译Apache以链接新的OpenSSL库。

目前主流的国密增强版OpenSSL分支有:

名称      简介与特点      注意事项  

GmSSL            由北京大学信息安全实验室开发维护,是国内最早、最知名的OpenSSL国密分支。支持SM2/SM3/SM4等算法,并与OpenSSL保持API兼容。            社区版已停止维护    ,生产环境需谨慎评估。  

TASSL          由江南天安基于OpenSSL  1.1.1s修改,支持国密SSL协议和TLS  1.3国密套件。与原生Nginx和Apache兼容性较好。  属于特定厂商的发行版,需关注其更新策略。  

铜锁/Tongsuo          阿里云等发起的开源项目,提供国密算法支持,常与Tengine配合使用。      可关注其社区活跃度和文档完善度。  

二、操作步骤简述:

1.    下载源码:从GmSSL、TASSL等项目的官方仓库下载国密版OpenSSL源码。

2.    编译安装:在服务器上编译并安装该国密版OpenSSL,注意安装路径(例如  `/usr/local/gmssl`)。

3.    获取Apache源码:下载官方Apache  HTTP  Server源码。

4.    重新编译Apache:在编译Apache时,通过参数明确指定链接到新编译的国密版OpenSSL库,而不是系统默认版本。

5.    配置与启用:在Apache的SSL配置文件中,设置`SSLCipherSuite`指令以启用国密套件。

三、方案二:使用OpenSSL  3.0及以上版本(更现代的方式)

从OpenSSL  3.0开始,通过其模块化的Provider(提供者)  机制,可以更灵活地加载算法。

      原理:OpenSSL  3.0本身可以通过加载特定的Provider来支持国密算法。虽然默认的Provider可能不包含,但可以寻找或开发专门的国密Provider。

      注意:此方案依赖于是否存在一个稳定、可用的国密Provider。在实施前,需要确认是否有符合你需求的Provider。

四、方案三:使用国密引擎(Engine)

OpenSSL的Engine机制允许动态加载第三方加密模块。

      原理:可以使用诸如  `gmssl-engine`  之类的项目,或通过  `openssl-pkcs11`  等插件间接提供支持。

      注意:Engine是一种相对较老的技术,在OpenSSL  3.0中已被Provider机制取代。此方案的稳定性和性能可能不如前两种方案。

五、方案四:使用商业或信创Linux发行版

最省心的方式是直接使用已集成了国密支持的操作系统。

      原理:许多面向信创市场的Linux发行版,如华为OpenEuler,其软件仓库中已包含打了国密补丁的OpenSSL包(如  `openssl-gm`)。

      做法:只需通过系统的包管理器(如  `yum`  或  `apt`)直接安装这些打了补丁的包即可,无需手动编译。

六、方案五:双证书方案(兼顾兼容性)

为了同时兼容国密浏览器(如密信、红莲花)和普通浏览器(如Chrome),通常会采用双证书方案。

      原理:在服务器上同时配置SM2(国密)证书和RSA(国际)证书。

      实现:服务器根据客户端是否支持国密算法,自动选择相应的证书进行SSL握手。这通常需要对服务器进行更复杂的配置,或使用支持该功能的特定软件(如Tengine)。

重要注意事项

      证书获取:实施改造前,你需要先从支持国密算法的CA机构申请并获取国密标准的SSL证书。

      彻底替换:如果选择方案一,请务必确保Apache在编译和运行时都链接到了正确的国密版OpenSSL库,避免因链接错误导致失败。

      配置正确性:国密套件的名称(如  `ECDHE-SM2-SM4-SM3`)可能因不同的OpenSSL分支而异,配置时需参考具体项目的文档。

总结

最推荐方案是“替换为国密增强版OpenSSL(方案一)”,这是最直接、可控且被广泛验证的路径,尤其是使用  GmSSL  或  TASSL  等成熟分支。

如果追求更低的管理成本和更“开箱即用”的体验,可以考虑直接选用已集成国密支持的信创操作系统(方案四)。