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