Apache  官方版本不支持国密算法。要在Apache上部署国密,核心思路是使用支持国密的OpenSSL替代版本来重新编译Apache和`mod_ssl`模块。

一、编译步骤(以GMSSL为例)

以下步骤以在CentOS  7环境下编译Apache  2.4.46与GMSSL为例。

1.    安装编译工具及依赖

        首先,安装必要的开发工具和依赖包。

        ```bash

        yum  install  -y  gcc  gcc-c++  wget  make  perl  pcre-devel  expat-devel  bison  bison-devel  flex  flex-devel

        ```

2.    获取并安装国密版OpenSSL  (GMSSL)

              从GMSSL官网下载`gmssl_openssl_1.1_bx.tar.gz`。

              解压到`/usr/local/`目录。

                ```bash

                tar  xzfm  gmssl_openssl_1.1_bx.tar.gz  -C  /usr/local

                ```

        *      此时,国密版OpenSSL的路径为  `/usr/local/gmssl`。

3.    获取并编译APR和APR-Util

        Apache  Portable  Runtime  (APR)  是Apache的必要组件,需要先编译。

              编译APR:

                ```bash

                wget  https://mirror.bit.edu.cn/apache//apr/apr-1.7.0.tar.gz

                tar  zxfm  apr-1.7.0.tar.gz

                cd  apr-1.7.0

                ./configure  --prefix=/usr/local/apr

                make  &&  make  install

                ```

              编译APR-Util:

                ```bash

                wget  https://mirrors.bfsu.edu.cn/apache//apr/apr-util-1.6.1.tar.gz

                tar  zxfm  apr-util-1.6.1.tar.gz

                cd  apr-util-1.6.1

                ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr

                make  &&  make  install

                ```

4.    获取并编译Apache  (httpd)

        *      下载Apache源码:

                ```bash

                wget  https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.46.tar.gz

                tar  zxfm  httpd-2.4.46.tar.gz

                cd  httpd-2.4.46

                ```

              配置(最关键一步):  执行`configure`脚本,关键是通过`--with-ssl=/usr/local/gmssl`指定使用国密版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-apr=/usr/local/apr  \

                        --with-apr-util=/usr/local/apr-util  \

                        --with-ssl=/usr/local/gmssl  \

                        LDFLAGS=-lm

                ```

              修改链接方式(重要):  为了让`mod_ssl`静态链接国密库,需要编辑配置文件。

                ```bash

                vi  build/config_vars.mk

                ```

                找到  `ab_LIBS`  行,将其中的  `-L/usr/local/gmssl/lib  -lssl  -lcrypto`  替换为  `/usr/local/gmssl/lib/libssl.a  /usr/local/gmssl/lib/libcrypto.a`。

              编译与安装:

                ```bash

                make  &&  make  install

                ```

                安装完成后,支持国密的Apache位于  `/usr/local/httpd`。

二、启用与配置

1.    加载`mod_ssl`模块:在`/usr/local/httpd/conf/httpd.conf`中,确保以下行未被注释:

        ```apache

        LoadModule  ssl_module  modules/mod_ssl.so

        ```

2.    配置国密证书与套件:编辑`/usr/local/httpd/conf/extra/httpd-ssl.conf`(或`httpd.conf`),在对应的`<VirtualHost>`中添加国密证书和密码套件。

        ```apache

        <VirtualHost  *:443>

                #  ...  其他配置  ...

                SSLCertificateFile  /path/to/your_sm2_cert.pem

                SSLCertificateKeyFile  /path/to/your_sm2_key.pem

                  #  启用国密协议和套件(具体名称可能因GMSSL版本而异)

                SSLProtocol  all  -SSLv2  -SSLv3  -TLSv1  -TLSv1.1

                SSLCipherSuite  ECDHE-SM2-SM4-SM3:SM2-SM4-SM3

                SSLHonorCipherOrder  on

        </VirtualHost>

        ```

三、验证

      检查模块:  执行  `/usr/local/httpd/bin/httpd  -M  |  grep  ssl`,若输出包含  `ssl_module  (shared)`  则表示成功。

      检查端口:  确保服务器443端口已开放。

四、补充说明

      双证书部署:为兼顾浏览器兼容性,可部署SM2/RSA双证书。主流云服务商(如阿里云、腾讯云)的文档提供了详细指导。

      其他国密方案:除GMSSL外,也可选择沃通  (Wosign)  的`wotrus_ssl`模块或铜锁  (Tongsuo)  等方案。