# MOZILLA_PKIX_ERROR_NOT_YET_VALID_CERTIFICATE：证书尚未生效

> Firefox 提示证书“尚未生效”，意思是按你设备的时间，证书的起始日期还没到。多数是电脑时间慢了，少数是证书生成时服务器时间不对。

Source: https://ssl.sh/zh/errors/mozilla-pkix-error-not-yet-valid-certificate/
Last updated: 2026-11-10

**MOZILLA_PKIX_ERROR_NOT_YET_VALID_CERTIFICATE 的意思是：按照你设备上的时间，这张证书还没到生效的时候。** 每张证书都有起始时间（`notBefore`）和截止时间（`notAfter`），设备时间早于起始时间，Firefox 就拒绝这张证书。实际遇到时，多半是设备时间错了，而不是证书错了；只有设备时间确实正确时，才是证书生成时起始时间被写到了未来。

## Firefox 显示的内容

页面标题是“警告：面临潜在的安全风险”。点开“高级”，Firefox 会解释：“各个网站通过证书证明自己的身份，它们在设定的时间段内有效。example.com 的证书将生效于”某个日期，并列出错误代码。这个代码在 Firefox 里的中文说明是“服务器出示的证书尚未生效。”

Firefox 能判断出是你的时钟有问题时，可能会改为显示“您的计算机时间有误”，提示你到系统设置里更正日期、时间和时区。

同类代码 `MOZILLA_PKIX_ERROR_NOT_YET_VALID_ISSUER_CERTIFICATE` 的说明是“用来颁发此服务器证书的一个证书尚未生效。”，意思是证书链里的中间证书或根证书起始时间在未来。

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

多个网站同时报日期错误，是你的设备时间错了；只有一个网站报错，才可能是证书的问题。打开两三个平时常用的大网站，如果都报和日期有关的错误，这些网站都不用修；如果只有一个网站报错，就看错误页上写的生效日期，和当前真实的北京时间（换算成 UTC 要减 8 小时）对比。生效时间比现在晚几个小时甚至几天，说明网站方签发或生成证书时机器时间不对，只能由他们来修。

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

4 种原因里，前两种是设备时间慢了，后两种是证书或上级 CA 证书的起始时间被写到了未来。

### 1. 设备时间慢了

典型情况有：主板纽扣电池没电，每次断电后日期都会回到出厂时间；新买或刚恢复出厂设置的设备还没同步时间；虚拟机从很久以前的快照恢复；为了延长某个软件的试用期手动改了日期。很多 HTTPS 网站同时打不开，基本就是这个原因。

Windows 和 Linux 双系统的电脑还有一个国内用户常碰到的问题：Windows 默认把主板时钟当作本地时间，Linux 默认当作 UTC，两边来回切换后，时间会差出整整 8 小时。刚签发不到 8 小时的证书在“慢了 8 小时”的系统里就会报尚未生效。开启自动校时后切换系统再检查一次，或者用 `timedatectl set-local-rtc` 让两边对主板时钟的理解保持一致。

把设备时间和错误页上的生效日期对照一下。电脑上可以用命令查看当前 UTC 时间：

```bash
date -u
```

### 2. 证书刚签发，你的时间只慢了一点

刚续期的证书从签发那一刻才生效，设备时间慢几分钟或几小时，就会在这段时间内被拒绝。公共 TLS 证书从 2026-03-15 起最长只有 200 天，一些 ACME 配置档签的是 45 天证书，续期越频繁，时间偏慢的设备遇到“新鲜”证书的机会就越多。

### 3. 证书是在时间不对的机器上生成的

路由器、NAS、摄像头等设备常在第一次开机时自己生成自签名证书，那时还没来得及同步时间；如果设备时间偏快，证书的起始时间就落在了未来。时间漂移的内部 CA 服务器也会出同样的问题。查看证书日期：

```bash
openssl s_client -connect 203.0.113.10:443 -servername example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -startdate -enddate
```

### 4. 上级证书尚未生效

内部 CA 的证书被设成了未来的日期，或者新的中间证书在生效前就部署上线了，会出现 `..._ISSUER_CERTIFICATE` 这个变体。用 `-showcerts` 或 [证书解析工具](https://ssl.sh/zh/tools/certificate-decoder/) 逐张查看证书链。

## 怎么修

访客要做的是打开系统的自动时间同步；网站或设备的管理者要先校准服务器时间，再重新生成证书。

**Windows：** 设置 > 时间和语言 > 日期和时间，打开“自动设置时间”和“自动设置时区”，再点“立即同步”。也可以在管理员命令行里执行：

```bash
w32tm /resync
```

**macOS：** 系统设置 > 通用 > 日期与时间，打开自动设置日期与时间。

**Linux：**

```bash
sudo timedatectl set-ntp true
timedatectl status
```

**手机：** Android 和 iOS 都在系统设置里打开“自动设置日期和时间”和自动时区。

**每次关机后时间都会重置的电脑，** 更换主板纽扣电池。

**网络环境里同步不上默认时间服务器的，** 可以改用国内云厂商提供的公共 NTP 服务器，比如阿里云文档里给出的 `ntp.aliyun.com`。

**网站或设备的管理者：** 先把服务器时间校准（`timedatectl`、`chronyc tracking`），再重新生成或申请证书，让 `notBefore` 落在过去。自己生成证书的设备，在时间同步后重新生成一次；内部 CA 则用正确日期重新签发 CA 证书并重新部署证书链。

其他浏览器和应用里的时间问题，见 [系统时间错误导致的 SSL 报错](https://ssl.sh/zh/errors/wrong-system-clock-ssl-error/)。

## 怎么确认已经修好

设备时间和 UTC 相差几秒以内、Firefox 不加例外就能打开页面，就说明已经修好。

1. `date -u` 或系统时钟和真实 UTC 时间相差不超过几秒。
2. `openssl x509 -noout -startdate` 显示的 `notBefore` 早于当前时间。
3. 在 Firefox 里刷新页面，不添加例外也能正常打开。如果之前添加过例外，到“设置 > 隐私与安全 > 证书 > 查看证书 > 服务器”里删掉。
4. 用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 从外部确认网站当前出示的是有效证书。
