官方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。关键在于编译时正确指定国密库路径,并妥善处理证书与加密套件的配置。