下面是卸载官方Apache、重新编译并指定Wosign(沃通/Wotrus)国密SM2模块的完整操作指导。
前置说明
官方版Apache + OpenSSL默认不支持国密算法,要实现SM2国密SSL证书适配,需要卸载原有Apache,重新编译Apache并链接国密版OpenSSL,同时使用沃通提供的国密SM2模块进行编译。
本文以 CentOS 7 + Apache 2.4.46/2.4.62为例进行说明。
第一步:卸载原有Apache
1.1 停止Apache服务
CentOS/RHEL系统(yum安装的):
bash
sudo systemctl stop httpd
Ubuntu/Debian系统(apt安装的):
bash
sudo systemctl stop apache2
1.2 判断安装方式并卸载
首先确认Apache的安装方式:
bash
# 如果是包管理器安装的
rpm -qa | grep httpd # CentOS/RHEL
dpkg -l | grep apache2 # Ubuntu/Debian
# 如果输出为空,则是手动编译安装的
情况一:包管理器安装的
CentOS/RHEL(yum):
bash
sudo yum remove httpd
或对于新版系统使用dnf:`sudo dnf remove httpd`
Ubuntu/Debian(apt):
bash
sudo apt-get remove --purge apache2
sudo apt-get autoremove
使用`--purge`参数可同时删除配置文件。如需更彻底地清理,可执行:
bash
sudo apt-get purge apache2 apache2-utils apache2-bin libapache2-mod-* -y
情况二:手动编译安装的
手动编译安装的Apache需要直接删除安装目录并清理进程:
bash
# 默认安装目录一般为 /usr/local/apache2 或 /usr/local/httpd
sudo rm -rf /usr/local/apache2
sudo rm -rf /usr/local/httpd
# 清理残留进程
sudo pkill -9 httpd
第二步:安装编译依赖
在编译国密版Apache之前,需要安装编译工具和必要依赖:
CentOS/RHEL:
bash
sudo yum install -y gcc gcc-c++ make
sudo yum install -y pcre pcre-devel zlib zlib-devel expat-devel
sudo yum install -y libtool
Ubuntu/Debian:
bash
sudo apt update
sudo apt install -y build-essential libpcre3-dev libssl-dev zlib1g-dev
第三步:下载国密版OpenSSL
国密版OpenSSL是支持SM2/SM3/SM4算法的关键组件。
方案一:使用GMSSL(推荐,由清华大学研发)
bash
cd /usr/local
wget https://www.gmssl.cn/gmssl/gmssl_openssl_1.1_b2024_x64_1.tar.gz
tar xzfm gmssl_openssl_1.1_b2024_x64_1.tar.gz -C /usr/local
# 解压后目录为 /usr/local/gmssl
方案二:使用沃通提供的国密模块
bash
cd /usr/local
# CentOS 7及以上版本:
wget https://www.wotrus.com/download/wotrus_ssl.tar.gz
tar -zvxf wotrus_ssl.tar.gz
# 重命名以便管理
mv wotrus_ssl wotrus_ssl2.0.4
第四步:编译安装APR、APR-Util和PCRE
Apache源码编译需要APR(Apache Portable Runtime)和PCRE支持。
4.1 安装APR
推荐使用apr 1.7.x版本:****
bash
cd /usr/local
wget http://mirrors.tencent.com/apache/apr/apr-1.7.5.tar.gz
tar -zvxf apr-1.7.5.tar.gz
cd apr-1.7.5
./configure --prefix=/usr/local/apr
make && make install
4.2 安装APR-Util
重要:推荐使用apr-util-1.5.x版本(1.6版本可能存在兼容性问题):****
bash
cd /usr/local
wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
tar -zvxf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr
make && make install
如果`make`时出现`#include`报错,请安装expat-devel:`yum install -y expat-devel`
4.3 安装PCRE
bash
# 联网环境下可直接安装
yum install -y pcre-devel
# 或者源码安装
cd /usr/local
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
tar -zvxf pcre-8.45.tar.gz
cd pcre-8.45
./configure --prefix=/usr/local/pcre
make && make install
第五步:编译安装国密版Apache
下载Apache源码(推荐2.4.46或2.4.62版本):
bash
cd /usr/local
wget https://downloads.apache.org/httpd/httpd-2.4.62.tar.gz
tar -zvxf httpd-2.4.62.tar.gz
cd httpd-2.4.62
5.1 配置编译选项(关键步骤)
指定国密版OpenSSL和沃通国密模块进行编译:****
bash
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork \
--with-zlib \
--with-pcre=/usr/local/pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr \
--with-ssl=/usr/local/gmssl
参数说明:
参数 说明
`--prefix=/usr/local/httpd` 指定安装目录
`--enable-so` 启用动态模块加载支持
`--enable-ssl` 启用SSL/TLS支持
`--enable-cgi` 启用CGI支持
`--enable-modules=most` 编译大多数模块
`--with-ssl=/usr/local/gmssl` 指定国密版OpenSSL路径
`--with-apr/apr-util` 指定APR库路径
5.2 编译与安装
bash
# 编译
make
# 安装
sudo make install
第六步:验证安装
6.1 检查Apache是否支持国密
bash
/usr/local/httpd/bin/httpd -v
/usr/local/httpd/bin/httpd -M | grep ssl
6.2 启动Apache
bash
/usr/local/httpd/bin/apachectl start
第七步:部署国密SSL证书
7.1 在httpd.conf中加载SSL模块
bash
vim /usr/local/httpd/conf/httpd.conf
确保以下两行未被注释:
apache
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
7.2 配置国密SSL证书
编辑SSL配置文件:
bash
vim /usr/local/httpd/conf/extra/httpd-ssl.conf
添加以下配置(根据实际证书文件路径修改):
apache
<VirtualHost *:443>
ServerName your-domain.com
DocumentRoot "/usr/local/httpd/htdocs"
# 国密SM2证书配置
SSLEngine on
SSLCertificateFile /path/to/your-sm2-certificate.crt
SSLCertificateKeyFile /path/to/your-sm2-private.key
SSLCertificateChainFile /path/to/your-ca-chain.crt
# 配置国密加密套件
SSLCipherSuite ECDHE-SM2-WITH-SM4-GCM-SM3:ECDHE-SM2-WITH-SM4-CBC-SM3
SSLProtocol TLSv1.2 TLSv1.3
</VirtualHost>
第八步:开启443端口并验证
8.1 防火墙放行443端口
bash
# CentOS 7 (firewalld)
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
# 或iptables
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
8.2 重启Apache并验证
bash
/usr/local/httpd/bin/apachectl restart
使用国密浏览器(如密信浏览器、红莲花浏览器)访问 `https://your-domain.com` 进行验证。****
成功特征:
- 地址栏显示绿色锁图标
- 点击证书详情可查看到SM2算法标识
常见问题排查
1. configure时找不到SSL库:检查`--with-ssl`路径是否正确指向国密版OpenSSL安装目录。
2. APR编译错误:推荐使用apr-util-1.5.x版本,1.6版本可能有兼容性问题。如报`#include`错误,安装expat-devel即可解决。
3. HTTPS仍不生效:确认443端口放行、证书文件路径正确、SM2模块已正确加载。****
注意事项
1. 操作前请务必备份现有的网站数据和配置文件
2. 卸载Apache前请确认没有其他服务依赖于当前Apache
3. 国密版Apache目前仅支持Linux X86_64架构
4. 国密SSL证书需要使用国密浏览器访问才能正常显示安全连接
5. 如遇问题,沃通CA提供一对一免费技术部署支持