下面是卸载官方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提供一对一免费技术部署支持