# “无法验证服务器身份”：iPhone 邮件和 Safari 怎么解决

> iOS 提示“无法验证服务器身份”，说明邮件或网站服务器的证书校验失败。常见原因：服务器名填错、自签名或证书过期。

Source: https://ssl.sh/zh/errors/ios-cannot-verify-server-identity/
Last updated: 2026-11-10

**“无法验证服务器身份”的意思是：iOS 无法确认服务器就是它声称的那台，所以在发送任何数据前先问你。** 最常出现在“邮件”App 添加或使用 IMAP/SMTP 账户时，任何使用苹果网络框架的 App 都可能触发。最常见的原因是服务器名和证书对不上。

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

证书不覆盖提示里的服务器名、已过期或是自签名，是服务器或账户设置的问题；证书正常，就查手机的日期、Wi-Fi 和描述文件。点“详细信息”看提示里是哪个服务器名，然后测试那台服务器。邮件服务器用 [STARTTLS 检测](https://ssl.sh/zh/tools/starttls-checker/) 或 OpenSSL，网站用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/)：

```bash
curl ssl.sh/example.com
openssl s_client -connect mail.example.com:993 -servername mail.example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -ext subjectAltName -dates
```

- **证书有效并覆盖这个名字**：检查手机的日期、所连的 Wi-Fi 和已安装的描述文件。
- **证书不覆盖这个名字、已过期或是自签名**：改账户设置，或者修服务器。

## 原因

邮件账户里填的主机名和证书不一致，是这个提示最常见的原因。

### 1. 账户里填的主机名和证书不一致

虚拟主机常让你填 `mail.example.com`，但服务器证书签的是服务商自己的主机名。按服务商文档里的主机名，同时填到收件和发件服务器里。国内常用邮箱的服务器名：QQ 邮箱 `imap.qq.com` / `smtp.qq.com`，网易 163 邮箱 `imap.163.com` / `smtp.163.com`，腾讯企业邮 `imap.exmail.qq.com`。用自己域名填 `mail.你的域名`，往往就会触发这个提示。

### 2. 自签名或私有 CA 证书

自建邮件服务器、NAS 上的邮件套件常用自签名证书。换成公开证书，或者用描述文件安装私有根证书并打开完全信任。

### 3. 邮件服务器证书过期

浏览器从不访问邮件服务器，续期时最容易被忘记。续期后重启 Postfix、Dovecot 等服务。

### 4. 邮件服务器缺中间证书

和 Safari 不同，邮件协议不能可靠地自动补全中间证书。要配置完整证书链。

### 5. 日期不对或网络在拦截

系统日期错误，或者网络在邮件端口上拦截 TLS，也会弹出同样的提示。打开自动设置时间，用蜂窝数据测试。

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

| 设备 / App | 显示内容 |
|---|---|
| iPhone / iPad “邮件” | “无法验证服务器身份”，说明“邮件”无法验证 mail.example.com 的身份，按钮：取消、详细信息、继续 |
| Safari | [“此连接非私人连接”](https://ssl.sh/zh/errors/safari-this-connection-is-not-private/) |
| macOS “邮件” | 提示无法验证服务器身份，可以“显示证书” |
| Outlook / Thunderbird / Foxmail | 各自的证书警告 |

## 站长怎么修

邮件服务商要让用户填写的每个服务器名都被证书覆盖，并发送完整、未过期的证书链。

**1. 公布正确的服务器名**（IMAP、POP、SMTP），证书要覆盖其中每一个。

**2. 在邮件服务器上安装完整证书链。** Dovecot 和 Postfix：

```text
# /etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key  = </etc/letsencrypt/live/mail.example.com/privkey.pem

# /etc/postfix/main.cf
smtpd_tls_chain_files = /etc/letsencrypt/live/mail.example.com/privkey.pem,
    /etc/letsencrypt/live/mail.example.com/fullchain.pem
```

**3. 续期后重载**（`systemctl reload dovecot postfix`），用 [STARTTLS 检测](https://ssl.sh/zh/tools/starttls-checker/) 检查邮件端口，网站部分用 `curl ssl.sh/example.com` 检查。
