手机和操作系统

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

作者: · 最后核实

报错信息无法验证服务器身份

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

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

证书不覆盖提示里的服务器名、已过期或是自签名,是服务器或账户设置的问题;证书正常,就查手机的日期、Wi-Fi 和描述文件。点“详细信息”看提示里是哪个服务器名,然后测试那台服务器。邮件服务器用 STARTTLS 检测 或 OpenSSL,网站用 SSL 检测:

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 “此连接非私人连接”
macOS “邮件” 提示无法验证服务器身份,可以“显示证书”
Outlook / Thunderbird / Foxmail 各自的证书警告

站长怎么修

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

1. 公布正确的服务器名(IMAP、POP、SMTP),证书要覆盖其中每一个。

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

# /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 检测 检查邮件端口,网站部分用 curl ssl.sh/example.com 检查。

常见问题

点“继续”安全吗?

只有在你清楚证书为什么有问题(比如是你自己维护的服务器),并且看过证书详细信息后才可以。否则点了“继续”,邮箱密码可能会发给冒充者。应该去改服务器名或修证书。

不小心点了“继续”,怎么撤销?

在“设置 → 邮件 → 账户”里删除这个邮箱账户,再重新添加。账户删除时,记住的例外也会一起清掉。

为什么只在发邮件时出现?

收信(IMAP/POP)和发信(SMTP)服务器是分开配置的,主机名和证书可能都不一样。到账户的高级设置里检查 SMTP 服务器名和端口。

公司装了描述文件,还是报错,为什么?

在 iOS 上,只安装含根证书的描述文件还不够,要到“设置 → 通用 → 关于本机 → 证书信任设置”里给这个根证书打开完全信任。通过 MDM 下发的描述文件可以自动信任。

资料来源

  1. Apple:在 iOS 和 iPadOS 中信任手动安装的证书描述文件
  2. Apple:iOS 13 和 macOS 10.15 中的受信任证书要求
  3. RFC 9525: Service Identity in TLS