用户在官方 Apache 中启用国密算法,确实需要重新编译。目前最成熟的方案是与沃通(Wosign)的国密模块 `wotrus_ssl` 一起编译。下面写一下在一个在 Linux 环境下的标准操作流程。
一、操作流程
请注意:以下操作以 CentOS 7 和 Apache 2.4.x 为例,其他 Linux 发行版命令可能稍有不同,请根据实际情况调整。
1. 第一步:准备工作
一台 Linux 服务器:拥有 `root` 权限。
国密 SSL证书:从 CA 机构获取,证书文件(`.crt` 或 `.pem`)和私钥文件(`.key`)。
确认端口:确保服务器上的 `443` 端口已开放,否则安装后 HTTPS 也无法访问。
2. 第二步:安装编译工具与依赖库
通过 `yum` 安装编译所需的核心工具和依赖库。
bash
# 安装 gcc、gcc-c++ 等基础编译工具
yum install -y gcc gcc-c++
# 安装 Apache Portable Runtime (APR) 及开发库
yum install -y apr apr-util expat-devel pcre-devel
3. 第三步:下载并编译安装 `wotrus_ssl` 国密模块
这是支持国密算法的关键步骤,需要下载、编译并集成沃通国密模块 `wotrus_ssl`。
bash
# 1. 下载 wotrus_ssl 模块 (建议到官方 https://www.wotrus.com 获取最新链接)
cd /usr/local/
wget https://www.wotrus.com/download/wotrus_ssl.tar.gz
# 2. 解压模块 (请勿修改解压后的文件夹名,以免编译错误)
tar -zxvf wotrus_ssl.tar.gz
# 注意:解压后进入目录查看,里面应该包含编译所需的脚本和文件
cd wotrus_ssl
# 3. 根据脚本进行编译
# 请参考官方文档执行编译命令,通常是一个 ./configure 和 make
4. 第四步:下载并编译安装支持国密的 Apache
在编译 Apache 时,需要显式地指定使用刚才编译好的 `wotrus_ssl` 模块。
bash
# 1. 下载 Apache 源码 (建议使用 2.4.46 或 2.4.62 等稳定版本)
cd /usr/local/
wget https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.62.tar.gz
tar -zxvf httpd-2.4.62.tar.gz
cd httpd-2.4.62
# 2. 配置编译参数,关键是指定 --with-ssl 为国密模块的路径
./configure \
prefix=/usr/local/httpd \
enable-so \
enable-ssl \
with-ssl=/usr/local/wotrus_ssl \ # 这里指向 wotrus_ssl 的目录
enable-mods-shared=all
# 3. 编译并安装
make && make install
5. 第五步:配置 Apache 证书
将你的国密证书文件(`.crt`)和私钥文件(`.key`)上传到服务器,例如放到 `/usr/local/httpd/conf/ssl.crt/` 和 `/usr/local/httpd/conf/ssl.key/` 目录下。
编辑 Apache 的 SSL 配置文件(通常是 `/usr/local/httpd/conf/extra/httpd-ssl.conf` 或 `/usr/local/httpd/conf/httpd.conf`),添加或修改 `<VirtualHost *:443>` 部分,以引用你的证书和私钥文件。
6. 第六步:验证与测试
检查配置:运行 `/usr/local/httpd/bin/apachectl configtest`,输出应为 `Syntax OK`。
重启 Apache:运行 `/usr/local/httpd/bin/apachectl restart`。
使用国密浏览器测试:用支持国密算法的浏览器(如 360 安全浏览器、密信浏览器等)访问你的网站,查看地址栏是否出现安全锁标志。
二、备选方案与核心思路
除了上述编译流程,还有一些思路可以帮助你简化部署:
直接使用预编译包:一些厂商(如 GMSSL.cn)提供了已经编译好的、支持国密算法的 Apache 版本。如果环境匹配,你可以下载解压后直接配置证书,跳过编译步骤。
核心思路:替换底层密码库:无论是哪种方案,其核心原理都是将 Apache 依赖的标准 OpenSSL 替换成支持国密算法的版本(如 GMSSL 或 `wotrus_ssl`),从而使上层应用获得国密能力。
如果编译或配置中遇到具体问题,可以提供更多细节,我们会尽力协助排查。