在Linux系统的Apache服务器上部署国密SSL证书,关键前提是官方版Apache+OpenSSL并不原生支持国密算法。

因此,完整的部署流程大致分为:重新编译支持国密的Apache环境,然后配置证书。

下面是基于主流云服务商文档整理的详细步骤,供你参考。

一、准备工作:确认前提条件

动手前,请先确认以下条件已满足:

      证书与域名:已通过权威CA机构购买了状态为“已签发”的国密标准(SM2)SSL证书。同时,确保域名已正确解析到服务器IP,且已完成ICP备案(国内服务器必须)。

      服务器权限:拥有服务器的root或具备sudo权限的账号。

      网络与端口:确保服务器上的  443端口  已开放,并且在云服务商的安全组策略中也放行了该端口。

      远程工具:准备好SSH远程登录工具(如PuTTY、Xshell)和文件传输工具(如WinSCP)。

第一步:编译支持国密的Apache环境(核心步骤)

这是最关键的一步,需要重新编译Apache,使其链接到国密版的OpenSSL(如`gmssl_openssl`)。

1.    安装编译依赖:通过SSH登录服务器,安装编译所需的开发工具和库。

        bash

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

2.    下载并编译国密版OpenSSL(GMSSL):

              从国密SSL实验室(GMSSL)官网下载适合你系统的`gmssl_openssl`包。

              将下载的文件解压到指定目录,例如  `/usr/local/gmssl`。

        bash

        #  示例:假设下载的文件为  gmssl_openssl_1.1_b2024_x64_1.tar.gz

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

3.    下载并编译Apache及其依赖(apr和apr-util):

              下载并编译安装`apr`和`apr-util`。

              下载Apache源码(推荐2.4.46或2.4.62版本)。

              关键配置:在`./configure`步骤中,通过`--with-ssl=/usr/local/gmssl`参数,指定Apache使用国密版OpenSSL进行编译。

        bash

        #  1.  下载并编译  apr  (示例)

        cd  /usr/local

        wget  https://archive.apache.org/dist/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

        #  2.  下载并编译  apr-util  (示例)

        cd  /usr/local

        wget  http://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz

        tar  -zvxf  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

        #  3.  下载、配置并编译  Apache  (示例)

        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  \

                                --with-zlib  \

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

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

                                --with-ssl=/usr/local/gmssl    #  <---  关键参数

        make  &&  make  install

  注意:编译完成后,新Apache的安装目录在  `/usr/local/httpd`。

第二步:准备证书文件

1.    下载证书:从你的SSL证书管理后台,下载专用于Apache或PEM格式的证书文件包。

2.    上传文件:解压后,你通常会得到以下文件。将它们上传到Apache服务器的一个安全目录,如  `/usr/local/httpd/conf/ssl/`。

              证书文件:通常是`.crt`或`.pem`结尾,也可能包含一个证书链文件(如`fullchain.pem`或`chain.crt`)。

              私钥文件:`.key`结尾,务必妥善保管。

第三步:配置Apache

1.    开启SSL模块:编辑Apache的主配置文件  `conf/httpd.conf`,确保以下两行没有被注释掉(去掉行首的`#`)。

        LoadModule  ssl_module  modules/mod_ssl.so

        Include  conf/extra/httpd-ssl.conf

2.    配置虚拟主机:编辑SSL配置文件  `conf/extra/httpd-ssl.conf`(或你站点的虚拟主机配置文件),在`<VirtualHost  _default_:443>`段落内,添加或修改以下指令:

              <VirtualHost  _default_:443>

                #  你的域名

                ServerName  www.yourdomain.com

                #  国密证书文件路径

                SSLCertificateFile  "/usr/local/httpd/conf/ssl/your_certificate.crt"

                #  国密证书私钥文件路径

                SSLCertificateKeyFile  "/usr/local/httpd/conf/ssl/your_private.key"

                #  如果证书压缩包中有证书链文件,取消下面注释并配置

                #  SSLCertificateChainFile  "/usr/local/httpd/conf/ssl/your_chain.crt"

                #  其他配置...

        </VirtualHost>

第四步(可选):部署SM2/RSA双证书以实现最佳兼容

由于国密证书仅被少数国产浏览器原生支持,为了兼容所有浏览器(如Chrome、Firefox),最佳实践是部署SM2/RSA双证书。

这需要在同一端口(443)同时配置两套证书,并利用  ALPN(应用层协议协商)  扩展,让服务器根据客户端是否支持国密协议(`sm2-http/1.1`)来返回对应的证书。

实现方式通常需要借助一个支持ALPN协商的模块或特定配置,具体方法可能因Apache版本和国密支持库而异,需要参考你所使用的国密SSL厂商提供的详细双证书部署文档。

第五步:验证部署结果

配置完成后,执行以下操作验证:

1.    检查配置:运行以下命令检查Apache配置文件语法是否正确。

        bash

        /usr/local/httpd/bin/apachectl  configtest

          如果看到  `Syntax  OK`,则配置无误。

2.    重启Apache:

        bash

        /usr/local/httpd/bin/apachectl  restart

3.    访问验证:

              在支持国密的浏览器(如360安全浏览器、红莲花浏览器)中,用  `https://你的域名`  访问,应显示安全锁标志。

              在Chrome或Firefox中访问,如果你只配置了国密证书,浏览器会报安全警告;如果配置了双证书,则应能正常访问。

你目前是在测试环境还是生产环境部署呢?如果是在测试环境,可以考虑先部署单张国密证书验证流程;如果是生产环境,为了兼顾各类浏览器的访问,建议直接按双证书方案来部署。需要我针对双证书方案展开讲讲具体配置可以随时聊。