# DLG_FLAGS_INVALID_CA：IE 模式和兼容模式下证书不受信任

> DLG_FLAGS_INVALID_CA 表示 Windows 不信任证书的签发机构：自签名、内部 CA、缺中间证书或根证书列表过旧。Edge IE 模式和 360 兼容模式下常见。

Source: https://ssl.sh/zh/errors/dlg-flags-invalid-ca/
Last updated: 2026-11-10

**DLG_FLAGS_INVALID_CA 的意思是：Windows 不信任签发这张网站证书的机构。** 这是 Internet Explorer、旧版 Edge 以及现在 Edge 的 IE 模式使用的代码，对应 Chrome 里的 [NET::ERR_CERT_AUTHORITY_INVALID](https://ssl.sh/zh/errors/net-err-cert-authority-invalid/)。证书可能是自签名的，可能是电脑不认识的公司内部 CA 签的，可能缺了中间证书，也可能链到了一个这台电脑根证书列表里没有的根。

## 现在还在哪里能看到它

这个代码如今主要出现在 Edge 的 IE 模式、内嵌 IE 引擎的业务软件和国内双核浏览器的兼容模式里。IE11 在大多数 Windows 版本上已于 2022 年 6 月 15 日停止支持，旧版 Edge 于 2021 年 3 月 9 日停止支持，仍会看到它的场景有三类：

- **Edge 的 IE 模式**用 IE11 的 Trident（MSHTML）引擎打开老网站，微软承诺 IE 模式至少支持到 2029 年。
- **企业内部的业务软件**内嵌了 IE 引擎，或者用 WinINet 发起 HTTPS 请求。
- **国内的双核浏览器。** 360 官方说明写明：国内主流浏览器都是双核，Webkit 内核用于常用网站，IE 内核主要用于部分网银、政府、办公系统；网站还可以用 `<meta name="renderer" content="ie-comp">` 指定用 IE 兼容内核。这些系统一旦证书有问题，用户看到的就是 IE 风格的错误。

WinINet 文档里对应的错误是 `ERROR_INTERNET_INVALID_CA`（12045），含义是该函数不认识签发服务器证书的证书颁发机构。同一家族还有表示域名不匹配的 [DLG_FLAGS_SEC_CERT_CN_INVALID](https://ssl.sh/zh/errors/dlg-flags-sec-cert-cn-invalid/) 和表示日期问题的 `DLG_FLAGS_SEC_CERT_DATE_INVALID`。

## 常见原因（按出现频率排序）

内网系统用了自签名或内部 CA 证书，是这个报错最常见的原因；其余 3 种是缺中间证书、根证书列表过旧和 HTTPS 解密。

### 1. 内网系统用了自签名或内部 CA 证书

OA、ERP、财务系统和各种设备管理页面，经常用内部 CA 签发的证书，或者干脆自签名。没加入域的电脑、或者在根证书下发之前装好的电脑，都不信任它。在警告页的证书对话框里看签发者，或者执行：

```bash
openssl s_client -connect intranet.example.com:443 -servername intranet.example.com -showcerts </dev/null
```

最后一张证书的签发者是公司内部 CA，就说明这台电脑缺这个根证书。

### 2. 服务器没发中间证书

服务器只发了自己的证书。Windows 会尝试从证书里的 AIA 地址下载缺失的上级证书（`certutil -urlfetch` 测的就是这个过程），但在限制外网访问的内网里下载不到，于是出现“在家能开、在单位打不开”的现象。数一数上面命令输出了几张证书，详见 [缺少中间证书](https://ssl.sh/zh/errors/missing-intermediate-certificate/)。

### 3. 电脑的根证书列表过旧

Windows 通过微软的根证书自动更新机制按需下载受信任的根证书。管理员可以用 `DisableRootAutoUpdate` 策略关掉它，与外网隔离的网络也连不上更新服务器，于是较新的公共根证书这台电脑不认识，链到它们的网站证书都会失败。微软文档专门讲了断网环境下如何在内部服务器上托管根证书列表。

### 4. 代理或杀毒软件在做 HTTPS 解密

做 HTTPS 解密的设备会用自己的根证书重新签发每张网站证书。电脑上没有这个根证书，所有被解密的网站都会报错。看警告页上的签发者名称，详见 [公司 SSL 解密](https://ssl.sh/zh/errors/corporate-ssl-inspection/)。

## 访客能做什么

访客能做的是收集信息交给 IT：把网址和证书详情里的“颁发者”名称记下来，发给 IT 部门。再用普通 Edge 或 Chrome 打开同一个地址：也报警告，说明证书本身不受信任；只有 IE 模式报错，多半是服务器缺中间证书。不要因为某个网页或邮件让你装根证书就去装。

## 在 Windows 上排查

用 Windows 自带的 `certutil -verify -urlfetch` 能查出证书链断在哪一张证书。把服务器证书另存为文件（比如从警告页的证书对话框导出），让 Windows 自己构建证书链并尝试下载缺失部分：

```bash
certutil -verify -urlfetch server.cer
```

输出里的 `CERT_E_UNTRUSTEDROOT`（0x800B0109）表示证书链处理完了，但终止于一个不受信任的根证书，也就是缺根；`CERT_E_CHAINING`（0x800B010A）表示无法建立到受信任根的证书链，通常是中间证书找不到或下载不下来。

## 怎么修

修法分两类：服务器补全证书链，内部根证书用组策略下发到每台电脑。

**服务器管理员（IIS）：** 把中间证书导入“本地计算机 > 中间证书颁发机构”，或者导入包含完整链的 PFX，然后在站点绑定里重新选择证书，见 [IIS 安装 SSL 证书](https://ssl.sh/zh/guides/iis-ssl-certificate/)。其他服务器配置完整证书链文件。

**内部 CA 根证书：** 用组策略下发：计算机配置 > 策略 > Windows 设置 > 安全设置 > 公钥策略 > 受信任的根证书颁发机构 > 导入。单台电脑用 `certlm.msc` 导入“本地计算机”存储，不要导入“当前用户”。

**断网环境：** 按微软文档在内部服务器上托管受信任根证书列表，或者手动导入需要的公共根证书。

**长期方案：** 把系统迁出 IE 模式；如果它有公网域名，换成公共信任的证书。IE 模式虽然还在支持期内，但每次证书或 TLS 配置调整都要在两种引擎下各测一遍，维护成本只会越来越高。

## 怎么确认已经修好

修好后，证书链校验不再报错，IE 模式下打开也不再有警告。

1. `certutil -verify -urlfetch server.cer` 不再报证书链错误。
2. 在 IE 模式（或 360 兼容模式）下重新打开网站，不再出现证书警告。
3. 公网可访问的网站，用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 检查，用 [证书链工具](https://ssl.sh/zh/tools/chain-builder/) 检查链的顺序。
