浏览器
DLG_FLAGS_SEC_CERT_CN_INVALID:IE 和兼容模式下的证书域名错误
DLG_FLAGS_SEC_CERT_CN_INVALIDDLG_FLAGS_SEC_CERT_CN_INVALID 的意思是:证书是签给另一个域名的,不是你打开的这个。 这是 Internet Explorer 和旧版 Edge 对 Chrome 所说的 NET::ERR_CERT_COMMON_NAME_INVALID 的叫法。如今主要出现在 Edge 的 IE 模式、老的 Windows 软件,以及 360 安全浏览器、QQ 浏览器等双核浏览器的兼容模式里。
先判断是网站的问题还是你电脑的问题
证书里没有你访问的域名,就是网站的问题;证书覆盖了,就检查你输入的地址。用 SSL 检测 看证书覆盖了哪些域名:
curl ssl.sh/example.com
IE 模式下的老系统经常用内网短名(http://oa)或 IP 地址打开,这些名字不会出现在任何证书里。替别的网站应答的代理和 Wi-Fi 认证页也会导致这个错误。
原因
访问的域名不在证书的 SAN 列表里是最常见的原因;老系统用短名或 IP 访问、IIS 绑错证书也会触发。
1. 域名不在 SAN 列表里
证书覆盖 www.example.com,页面或软件打开的却是 example.com,或者某个内部别名。查看证书里的域名:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -ext subjectAltName
2. 老系统用短名或 IP 访问
多年前配置的业务系统常常访问 https://appserver 或 https://203.0.113.10。要么把这些名字加进证书(只能用内部 CA,公开 CA 不给内网名签证书),要么把系统改成用完整域名访问。
3. IIS 绑定了错误的证书
网站的 HTTPS 绑定用的是另一张证书,或者没开 SNI,服务器出示的是默认绑定的证书。到 IIS 管理器 → 网站 → 绑定里检查。
4. 被拦截或遇到 Wi-Fi 认证页
替真实网站应答的设备会出示它自己的证书。换个网络对比。
在各浏览器/系统上的样子
| 浏览器 | 显示内容 |
|---|---|
| IE / Edge IE 模式 / 360 兼容模式 | “此网站的安全证书有问题。”,并说明证书是为其他网站地址颁发的;错误码本身会出现在日志和部分软件的弹窗里 |
| 旧版 Edge(EdgeHTML) | 提示站点不安全,代码相同 |
| Chrome / 新版 Edge / 360 极速模式 | NET::ERR_CERT_COMMON_NAME_INVALID |
| Firefox | SSL_ERROR_BAD_CERT_DOMAIN |
站长怎么修
修法是把用户和软件实际用到的每个域名都签进证书,并在 IIS 上给每个主机名绑定正确的证书。
1. 把用户和软件实际用到的域名都签进证书:
sudo certbot certonly --nginx -d example.com -d www.example.com
2. IIS 上给每个主机名绑定正确的证书,多个 HTTPS 站点共用一个 IP 时勾选“需要服务器名称指示”:
New-WebBinding -Name "Example" -Protocol https -Port 443 -HostHeader "example.com" -SslFlags 1
然后在 IIS 管理器里给这个绑定选好证书。从阿里云、腾讯云下载证书时选 IIS 格式(PFX),导入到服务器的“个人”证书存储。
3. 尽量摆脱对 IE 模式的依赖。 基于 WinINet 的客户端对老配置更挑剔,也更难排查。其余 TLS 设置可参考 Schannel 报错,改完用 curl ssl.sh/example.com 复测。
常见问题
IE 都退役了,为什么还会看到这个代码?
Edge 的 IE 模式、内嵌 IE 内核的业务软件,以及 360 安全浏览器等双核浏览器的兼容模式,用的仍是 Windows 的 WinINet,它就用 DLG_FLAGS 系列代码报告证书问题。国内不少政务、银行、高校的老系统要求用兼容模式打开,所以这个代码在国内比国外常见。
DLG_FLAGS_INVALID_CA 和 DLG_FLAGS_SEC_CERT_DATE_INVALID 是什么?
DLG_FLAGS_INVALID_CA 表示 Windows 不信任签发者(自签名、私有 CA、缺中间证书);DLG_FLAGS_SEC_CERT_DATE_INVALID 表示证书过期或电脑时间不对。分别对应 Chrome 的 NET::ERR_CERT_AUTHORITY_INVALID 和 NET::ERR_CERT_DATE_INVALID。
可以点“继续浏览此网站(不推荐)”吗?
只适用于你了解并且能管理的内部系统,而且你确认访问的地址没错。其他情况下,证书签给了别的域名,意味着你连的可能不是想连的那台服务器。