在  Apache  服务器上配置国密加密套件,核心思路是用支持国密算法的软件(如  `GMSSL`)替换掉  Apache  默认依赖的  `mod_ssl`  和  `OpenSSL`,才能正确使用  `SM2-WITH-SMS4-SM3`  这类加密套件。

一、国密方案核心:替换  OpenSSL

`Apache`  和  `mod_ssl`  模块原生不支持国密算法。需要将其底层依赖的  `OpenSSL`  替换为国密增强版(如  `GMSSL`  或  `Tongsuo`),才能实现国密  `TLS`。安装时,Apache  需要显式链接到这个国密版的  OpenSSL  库。

二、配置步骤

步骤一:编译与安装国密支持的  Apache

1.    安装开发工具:

        bash

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

2.    下载与编译依赖库  (APR,  APR-Util):

        按顺序编译安装  `apr`  和  `apr-util`。

        bash

        #  编译安装  apr  (示例版本  1.7.5)

        cd  /usr/local

        wget  -c  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

        #  编译安装  apr-util

        cd  /usr/local

        wget  -c  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-util  --with-apr=/usr/local/apr

        make  &&  make  install

3.    下载并安装国密版  OpenSSL  (如  GMSSL):

        下载  GMSSL  包,解压以备编译。

        bash

        #  下载并解压  GMSSL  至  /usr/local,解压后得目录  /usr/local/gmssl

        cd  /usr/local

        wget  https://www.gmssl.cn/gmssl/gmssl_openssl_1.1_b1.tar.gz

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

4.    编译  Apache  并链接国密  OpenSSL:

        下载官方  Apache  源码,配置时通过  `--with-ssl`  指定国密版  OpenSSL  路径,进行编译与安装。

        bash

        cd  /usr/local

        wget  https://archive.apache.org/dist/httpd/httpd-2.4.46.tar.gz

        tar  -zvxf  httpd-2.4.46.tar.gz

        cd  httpd-2.4.46

        ./configure  --prefix=/usr/local/httpd  --enable-so  --enable-ssl  --enable-cgi  \

            --enable-rewrite  --enable-modules=most  --enable-mpms-shared=all  \

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

            --with-ssl=/usr/local/gmssl    #  关键:指向国密版OpenSSL

        make  &&  make  install

步骤二:配置国密加密套件

1.    准备证书文件:

        获取并上传证书与私钥文件(默认路径如  `/etc/httpd/conf.d/ssl/`)。需准备两个版本:

              国密证书:`server-sm2.crt`  和  `server-sm2.key`。

              RSA证书(可选,推荐):`server-rsa.crt`  和  `server-rsa.key`。

2.    修改  Apache  配置文件:

        编辑虚拟主机配置文件(如  `conf/extra/httpd-ssl.conf`  或  `conf.d/ssl.conf`)。下面的示例展示了如何按优先级组合配置两种证书:

        apache

        #  加载  SSL  模块

        LoadModule  ssl_module  modules/mod_ssl.so

        #  监听  443  端口

        Listen  443

        <VirtualHost  *:443>

                ServerName  your-domain.com

              #  推荐:先配置RSA证书,再配置国密证书,以实现自适应算法

                SSLCertificateFile  /path/to/your-rsa-cert.pem

                SSLCertificateKeyFile  /path/to/your-rsa-key.pem

                #  国密证书配置

                SSLCertificateFile  /path/to/your-sm2-cert.pem

                SSLCertificateKeyFile  /path/to/your-sm2-key.pem

                #  配置加密套件:此处为关键配置,用于指定国密算法组合

                SSLCipherSuite  ECDHE-SM2-WITH-SM4-SM3:SM2-WITH-SMS4-SM3:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256

                #  服务器优先选择套件

                SSLHonorCipherOrder  on

                #  启用  TLS  协议(国密通常基于  TLS  1.1/1.2  扩展)

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

        </VirtualHost>

        重点解析:

              `SSLCipherSuite`:此行是核心,`SM2-WITH-SMS4-SM3  :`  前缀明确指定了优先使用国密套件,其后可配置国际算法作为降级兼容方案。

              `SSLHonorCipherOrder  on`:强制服务器严格按照  `SSLCipherSuite`  中规定的顺序来选择加密套件。

              双证书部署:同时配置国密和  RSA  证书,服务器能根据客户端请求自动选用合适的算法,极大增强兼容性。

3.    重启  Apache  服务:

        配置完成后,务必进行语法检查并让新设置生效。

        bash

        #  检查配置文件语法

        /usr/local/httpd/bin/apachectl  -t

        #  重启服务

        systemctl  restart  httpd

三、验证配置效果

      使用支持国密的浏览器(如  360  安全浏览器、红莲花浏览器)访问网站,地址栏应正常显示安全锁标志。

      使用  `openssl  s_client`  在服务器本地进行验证(如果  `openssl`  命令本身也替换为国密版),确保国密套件被列出且握手成功。

      使用专业在线工具(推荐):使用  myssl.com  的国密检测工具进行检测,它能清晰展示服务器是否支持国密套件,是验证的最佳选择。

如果你在具体的编译或配置中遇到问题,可以告诉我你使用的操作系统和  Apache  版本,我来帮你一起看看。