手机和操作系统
“无法验证服务器身份”: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 下发的描述文件可以自动信任。