验证国密证书的加密套件是否生效,可以从浏览器和命令行两个主要途径入手,由浅入深进行排查。
方法一:浏览器直观验证(最快捷)
这是最直接的验证方式,但前提是必须使用支持国密算法的浏览器,例如密信浏览器、红莲花浏览器、360国密浏览器等。普通浏览器(如Chrome、Firefox)默认不支持国密协议,无法建立国密连接。
1. 访问网站:使用国密浏览器访问你的网站。
2. 查看地址栏:如果连接成功,地址栏通常会显示一个安全锁图标。
3. 查看证书详情:点击地址栏的锁形图标,选择“证书”或“查看证书”。在证书的“详细信息”中,检查以下关键信息:
算法标识:应包含 `SM2` 算法标识。
签名算法:应显示为 `SM3WithSM2` 或类似格式。
颁发机构:应为国密CA,例如GDCA、CFCA等。
方法二:命令行工具验证(更精确)
使用命令行工具可以更精确地控制连接参数并查看详细的握手信息。
使用 Gmssl 工具:`gmssl` 是一个国密算法的开源工具箱,可以直接用来测试。
bash
gmssl s_client -connect 你的域名:443 -cipher ECC-SM2-SM4-CBC-SM3
成功标志:若连接成功,输出信息中会显示 `Protocol: GMSSL` 和协商使用的国密加密套件(如 `ECC-SM2-SM4-CBC-SM3`)。参数 `-cipher` 可以指定一个国密套件来强制测试。
使用 Openssl 工具(辅助验证):如果你的 `openssl` 版本(如铜锁/Tongsuo)支持国密,也可以用类似方法测试。对于不支持国密的普通 `openssl`,此命令会失败,可从侧面印证服务器未降级到国际算法。
bash
openssl s_client -connect 你的域名:443 -servername 你的域名
成功连接后,检查输出的 **`Signature Algorithm`** 字段是否为 `sm3WithSM2`。
方法三:深度检测与排查
如果以上方法不奏效,可以尝试以下深度检测手段:
检查服务端日志:在Nginx或Apache的日志中,过滤 `GMSSL` 或 `SM2` 关键字。成功建立国密连接的日志可能包含 `GMSSLv1.2 handshake completed` 等字样。
抓包分析:使用 Wireshark 等工具抓取网络包,过滤 `tls.handshake.type == 1`(Client Hello包)。检查 `Cipher Suites` 列表中是否包含国密套件,例如 `0xE013` (对应 `ECC-SM2-SM4-CBC-SM3`)。
常见问题与注意事项
服务器软件需支持国密:官方原版的Nginx或Apache默认不支持国密,需要重新编译并加载国密模块(如`wotrus_ssl`)或使用“国密版”。
证书信任问题:如果浏览器提示“证书不受信任”,通常是因为未安装国密CA的根证书。需要手动将其导入到浏览器或系统的信任库中。
理解“加密套件”:国密加密套件通常由SM2(密钥交换/签名)、SM4(对称加密)和SM3(消息摘要)组合而成。验证时,应确认协商的套件属于这一组合。
双证书部署:许多服务器采用“国密+国际”双证书方案以兼容更多浏览器。验证时需注意,只有国密浏览器才会触发国密证书和套件。
总结
验证国密证书加密套件生效的核心是“国密客户端 + 国密服务端”的正确协商。
普通用户或快速验证,推荐使用国密浏览器。
技术人员深度排查,建议使用 `gmssl` 命令行工具。