官方Apache和“国密Apache”的核心差异在于底层SSL/TLS库。官方版依赖标准OpenSSL,不支持国密算法;而国密版则通过替换为支持国密的SSL库(如GmSSL)来获得国密能力。

一、核心差异:SSL库替换

简单来说,国密改造的本质是“换心”:

   官方Apache:使用标准OpenSSL,仅支持RSA、ECDSA等国际算法。

   国密Apache:编译时链接国密增强版SSL库,如GmSSL、沃通(Wosign)的wotrus_ssl模块或Tongsuo等。Apache自身的源码通常无需修改。

二、编译步骤概览

编译国密Apache,本质上就是用国密SSL库替换掉标准的OpenSSL,关键步骤如下:

1.  准备国密SSL库:下载并编译安装GmSSL等,记录其安装路径(如`/usr/local/gmssl`)。

2.  准备Apache与依赖:下载Apache HTTP Server源码及其依赖APR和APR-Util。

3.  配置编译选项:在Apache的`./configure`阶段,最关键的是通过`--with-ssl`参数指定国密SSL库的路径。

4.  编译与安装:执行`make`和`make install`完成编译安装。

三、关键注意事项

编译和部署国密Apache时,请特别留意以下几点:

   明确改造路径:国密改造主要有两种方式:

       源码编译(主要方式):下载Apache源码,自行编译并链接国密SSL库。

       使用预编译包:部分厂商(如GmSSL.cn)提供已编译好的国密版Apache,可直接下载使用。

   正确配置证书:在`httpd-ssl.conf`中,`SSLCertificateFile`和`SSLCertificateKeyFile`仍需指向你的国密证书(SM2)和密钥文件。注意,国密证书的格式和标准证书不同,必须由支持国密的CA签发。

   启用国密加密套件:必须在Apache配置中,通过`SSLCipherSuite`指令显式启用国密套件,例如`SSLCipherSuite ECDHE-SM2-SM4-SM3:SM2-SM4-SM3`。

   管理依赖与环境:

       编译前确保系统已安装`gcc`、`gcc-c++`、`make`等开发工具。

       编译GmSSL等库时,需注意其依赖项(如Perl、NASM)。

       若系统已有旧版OpenSSL,编译时需注意通过`--with-ssl`参数指定正确的国密库路径,避免链接错误。

   处理兼容性与验证:

       双证书部署:为兼顾浏览器兼容性,可部署SM2/RSA双证书。

       客户端要求:仅部署国密证书的网站,需使用支持国密算法的浏览器(如密信浏览器、红莲花浏览器)访问。

       验证部署:部署后,可使用GmSSL自带的`gmssl s_client`命令测试国密连接是否成功。

总结

编译“国密Apache”的核心就是用国密SSL库替换标准的OpenSSL。关键在于编译时正确指定国密库路径,并妥善处理证书与加密套件的配置。