在  Apache  配置中,同时出现  `SSLCertificateFile`  和  `SSLCertificateFileSM2`,是服务器需要同时支持国际标准(如  RSA)和国密标准(SM2)算法时的一种特定配置方案,通常被称为“国密/国际双证书”或“双算法证书”部署。

`SSLCertificateFile`  与  `SSSLCertificateFileSM2`  的核心区别在于它们所指向的证书体系和使用场景。

  特性      SSLCertificateFile      SSLCertificateFileSM2  

核心用途          配置国际标准证书(通常是  RSA  或  ECC  算法)。    专门配置国密标准证书(SM2  算法)。  

指向证书          国际标准算法(RSA/ECC)的服务器证书。      国密算法(SM2)的服务器证书。  

工作前提          Apache  默认  mod_ssl  +  标准  OpenSSL  即可支持。      需要第三方国密模块(如  `wotrus_ssl`)或使用  GmSSL  重新编译的  Apache。  

配置关系          通常与  `SSLCertificateKeyFile`(RSA/ECC  私钥)成对配置。    通常与  `SSLCertificateKeyFileSM2`(SM2  私钥)成对配置。  

需要特别说明的是:`SSLCertificateFileSM2`  并非  Apache  官方指令,而是不同国密解决方案(如沃通、阿里云等)为了适配现有配置体系而自定义的指令。在实际使用中,请务必参考您所用方案的手册。

背景知识:什么是国密双证书

`SSLCertificateFileSM2`  的出现源于国密标准的一项关键设计:签名证书与加密证书分离的双证书体系。

      签名证书:用于身份认证和签名,类似您的网络身份证(公钥和私钥均由用户自己生成)。

      加密证书:专门用于会话密钥交换和加密,保障数据传输的机密性(私钥由  CA  产生,安全性极高)。

这一设计相较于传统的  RSA/ECC  证书“一证多用”模式,实现了密钥用途的强制隔离,提供了更精细的安全边界。如果将  RSA  证书比喻为一把“万能钥匙”,国密双证书则像是一套“独立的身份证+保险柜钥匙”,功能专一、各司其职。

国密证书在  Apache  中的具体配置

由于  Apache  和标准  OpenSSL  默认不支持国密,配置包含  `SSLCertificateFileSM2`  的环境,核心步骤通常如下:

1.    准备支持国密的  Apache  环境:这是最关键的一步。您必须获取并编译支持国密算法的  Apache  版本。主要途径有:

            使用第三方国密模块:一些厂商提供了集成好的国密版  Apache,或可用于官方  Apache  的国密模块(如  `wotrus_ssl`)。

              使用  GmSSL  自行编译:GmSSL  是一个支持国密算法的  OpenSSL  分支,通过用它重新编译  Apache,可以获得原生支持国密的环境。

2.    获取国密证书文件:申请并下载国密证书。通常您会得到以下文件:

              签名证书文件:例如  `server_sign.crt`

              加密证书文件:例如  `server_encrypt.crt`

              签名证书私钥:例如  `server_sign.key`

              加密证书私钥:例如  `server_encrypt.key`

3.    修改  Apache  配置文件  (`httpd.conf`  或  `ssl.conf`):

        单证书配置(RSA算法)

        apache

        <VirtualHost  *:443>

                ServerName  www.example.com

                SSLEngine  on

                SSLCertificateFile  /path/to/rsa_server.crt

                SSLCertificateKeyFile  /path/to/rsa_private.key

        </VirtualHost>

                双证书配置(国密+国际)

        apache

        <VirtualHost  *:443>

                ServerName  www.example.com

                SSLEngine  on

                #  配置国际RSA证书

                SSLCertificateFile  /path/to/rsa_server.crt

                SSLCertificateKeyFile  /path/to/rsa_private.key

                #  配置国密SM2双证书

                SSLCertificateFileSM2  /path/to/sm2_server_sign.crt

                SSLCertificateKeyFileSM2  /path/to/sm2_server_sign.key

                SSLCertificateFileSM2Encrypt  /path/to/sm2_server_encrypt.crt

                SSLCertificateKeyFileSM2Encrypt  /path/to/sm2_server_encrypt.key

        </VirtualHost>

              请注意:以上  `SSLCertificateFileSM2Encrypt`  等指令仅为示例,具体指令名称、国密密码套件(CipherSuite)的配置,以及是否需要在  `VirtualHost`  中通过  `<IfDefine>`  等指令进行算法协商,必须严格遵循您所使用的国密解决方案的官方文档。

一个更简单的替代方案:Nginx

对于一些用户来说,为  Apache  配置国密支持的过程可能稍显复杂。如果您希望有更简便的选择,可以考虑使用  Nginx。高版本的  Nginx(例如  1.19.4  及以上)通过配置多个  `ssl_certificate`  指令,可以更优雅地实现  RSA  和  ECC  等多种算法证书的共存。对于国密  SM2  证书,相关方案仍在发展中,但  Nginx  灵活的架构使其更易于集成新的协议和算法。

总结

简单来说,`SSLCertificateFile`  是  Apache  国际标准  TLS  配置的基础;而  `SSLCertificateFileSM2`  则是国密生态衍生出的“专属车道”,用于专门引导和处理国密  SM2  证书的配置需求。

希望这些信息能帮助您理解两者的区别。如果您正着手进行配置,并且找到了具体的方案文档,我很乐意和您一起探讨更详细的步骤。