`NET::ERR_CERT_INVALID`是访问国密证书网站时常见的浏览器错误。由于国密(SM2/SM3/SM4)是一套与国际TLS/SSL(如RSA)完全不同的密码体系,浏览器和服务器需要专门的配置才能支持。
这个错误的核心原因是浏览器无法验证您网站证书的有效性。具体来说,可以从以下四个方向进行排查:
一、核心排查方向
1. 服务器配置:是否真的“认识”国密证书?
普通的Nginx、Apache是不支持国密算法的。
检查国密模块:确认服务器软件(如Nginx)是否编译安装了国密版OpenSSL(如GmSSL、铜锁/Tongsuo)。
验证证书链顺序:国密证书链必须严格按“服务器证书 → 中间证书 → 根证书”的顺序拼接。顺序错误会导致握手失败。可使用`openssl`命令检查证书链顺序。
确认密钥匹配:确保配置的私钥(`.key`文件)与服务器证书(`.crt`或`.pem`文件)是匹配的。
2. 浏览器信任:根证书到位了吗?
这是最常见的原因。国际主流浏览器(Chrome、Firefox等)默认不信任国密根证书。
使用国密浏览器:这是最简单的解决方案,推荐使用360安全浏览器、红莲花浏览器等内置国密支持的产品。
手动导入根证书:如果必须使用Chrome/Firefox,需要手动将国密CA的根证书导入到浏览器的“受信任的根证书颁发机构”列表中。
3. 证书本身:证书文件有问题吗?
检查证书有效性:确保证书没有过期,且域名完全匹配(包括`www`)。
检查证书链完整性:确认服务器上部署了完整的证书链(包含中间证书)。可通过SSL检测工具验证。
核实签发机构:确认证书是由国家认可的国密CA机构签发。
4. 客户端环境:系统时间对吗?
证书的有效期验证依赖准确的系统时间。
校准系统时钟:确保客户端(访问者的电脑)和服务器端的系统日期和时间都是准确的。时间偏差过大,浏览器会直接判定证书无效。
二、排查工具箱
工具/方法 用途 关键命令/步骤
GMSSL s_client 模拟国密SSL握手,排查服务器端问题 `gmssl s_client -connect your-domain.com:443 -cipher ECDHE-SM2-SM4-CBC-SM3`
OpenSSL 检查证书文件细节和证书链顺序 `openssl x509 -in server.crt -text -noout`
浏览器开发者工具 查看证书详情和安全连接信息 点击地址栏的“锁”图标 -> “证书”
在线SSL检测工具 从外部检测证书状态、链完整性和协议支持 搜索“SSL证书检测”等关键词
三、总结与建议
总的来说,排查“NET::ERR_CERT_INVALID”错误,建议按以下路径快速推进:
1. 优先尝试用国密浏览器(如360安全浏览器)访问。如果能正常打开,问题就出在Chrome等国际浏览器上,核心是根证书未被信任。
2. 如果国密浏览器也报错,则问题大概率在服务器配置上。重点检查Web服务器是否支持国密,以及证书链的顺序和完整性。
3. 使用 `gmssl s_client` 命令从服务器端进行握手测试,这是定位服务端问题的有效手段。
4. 最后,不要忘记检查那些看似简单但致命的问题:证书是否过期和系统时间是否准确。
对于政企等对兼容性要求高的场景,建议采用SM2+RSA双证书部署方案,让国密浏览器用SM2证书,国际浏览器用RSA证书,实现最佳兼容。