# unable to get local issuer certificate：公司代理 SSL 解密所致

> 公司防火墙、上网行为管理设备会解密 HTTPS 再重新签发。根证书没部署好或 App 做了证书固定时，就会出现证书错误。

Source: https://ssl.sh/zh/errors/corporate-ssl-inspection/
Last updated: 2026-11-10

**公司 SSL 解密的意思是：公司的防火墙或代理把你的 HTTPS 流量解密、检查，再用公司自己的根证书签发的证书重新加密。** 在信任这张根证书的公司电脑上，上网看起来一切正常；不信任它的，比如个人笔记本、Firefox、命令行工具或手机 App，访问每个被解密的网站都会报证书错误。

## 先判断是网站的问题还是你设备的问题

是网络的问题：网站证书在外部检测正常，公司网络里看到的颁发者却是公司或安全网关。先用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 从外部查网站：

```bash
curl ssl.sh/example.com
```

再在公司网络里的终端上看颁发者：

```bash
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -issuer
```

颁发者写的是你们公司、某个安全网关或带“Inspection”字样，而不是检测里看到的公开 CA，就确认是被解密了。

## 原因

多数情况是这台设备没装解密根证书；即使装了，自带信任库的工具和做了证书固定的 App 仍会失败。

### 1. 这台设备没装解密根证书

自带的个人设备、新装系统的电脑连上公司网络后没有这张根证书。需要 IT 把设备纳入管理，或者通过正规渠道提供根证书。国内企业常见的上网行为管理、下一代防火墙设备都有 SSL 解密功能，一般会配套提供根证书下载和终端安装指引。

### 2. 浏览器或工具有自己的信任库

Firefox（除非开启企业根证书）、Java 的 `cacerts`、Python 的 `certifi`、Node.js、使用 OpenSSL 的 Git 都不读操作系统的证书库，每一个都要单独配置根证书。

### 3. 手机 App 忽略用户和管理员 CA

目标 API 24 及以上的安卓 App 忽略用户安装的根证书，很多 iOS App 做了证书固定。见 [安卓 App 不信任用户 CA](https://ssl.sh/zh/errors/android-app-user-ca-not-trusted/)。

### 4. 证书固定或双向认证的连接

软件更新程序、网银和支付 App、使用客户端证书的服务，一解密就会坏，需要在代理上加例外。

### 5. 解密设备生成的证书太弱

老旧设备可能用 SHA-1 签名、不带 SAN、处理不好 TLS 1.3，即使是公司管理的电脑也会出现 [NET::ERR_CERT_INVALID](https://ssl.sh/zh/errors/net-err-cert-invalid/) 或协议错误。

## 在各浏览器/系统上的样子

| 客户端 | 显示内容 |
|---|---|
| Chrome / Edge / 360 / QQ 浏览器（未纳管设备） | [NET::ERR_CERT_AUTHORITY_INVALID](https://ssl.sh/zh/errors/net-err-cert-authority-invalid/) |
| Firefox | [MOZILLA_PKIX_ERROR_MITM_DETECTED](https://ssl.sh/zh/errors/mozilla-pkix-error-mitm-detected/) 或 SEC_ERROR_UNKNOWN_ISSUER |
| curl、Git、Python、npm | `unable to get local issuer certificate`、`CERTIFICATE_VERIFY_FAILED` |
| 安卓 / iOS App | `Trust anchor for certification path not found`、`NSURLErrorDomain -1202` |

## 站长和 IT 怎么修

IT 要做两件事：把解密根证书部署到每个需要它的信任库，并把无法解密的目标排除在外。

**1. 把解密根证书部署到所有需要的地方：** 操作系统证书库用域控组策略或终端管理软件；Firefox 用 `Certificates` 策略（`ImportEnterpriseRoots`）；Java 用 `keytool -importcert` 导入运行时的 `cacerts`；开发工具按文档配置环境变量。

**2. 把无法解密的目标加入例外：** 做了证书固定的 App、系统和软件更新服务、网银和医疗网站、使用客户端证书的服务。

**3. 保持解密设备固件最新**，让它生成的证书符合浏览器规则（SHA-256、带 SAN、有效期合理），并支持 TLS 1.3。

**4. 对公开网站的站长来说**，只要 `curl ssl.sh/example.com` 显示证书链有效，服务器就不用改；客服可以建议受影响的用户联系他们公司的 IT 部门。
