移动端请求 HTTPS 接口为什么会失败?

シ广红 阅读 32

我在开发一个移动端 H5 页面,调用后端的 HTTPS 接口时老是失败,控制台报错 net::ERR_CERT_AUTHORITY_INVALID。明明在 PC 浏览器上能正常访问,怎么一到手机上就不行了?

我试过用 iOS Safari 和安卓 Chrome 都有这个问题,证书是公司内网签的自签名证书,难道移动端对 HTTPS 的校验更严格?有没有办法绕过或者正确配置?

我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
设计师卫利
你这问题很常见,根本原因不是移动端校验更严格,而是自签名证书没被系统信任。PC 浏览器可能手动加过信任,但移动端默认只认受信 CA(比如 Let’s Encrypt、DigiCert 这些),内网自签的证书它不认识,就直接报 ERR_CERT_AUTHORITY_INVALID

别想着绕过——比如 iOS 上点“仍要访问”这种临时方案,对 H5 页面完全没用,页面根本没机会加载,JS 也跑不起来,请求直接被系统拦截。

靠谱做法就两个:

第一个是让后端换正规证书。如果是对外服务的域名,直接用 Let’s Encrypt 免费证书,配置好后所有设备都能认。注意要配全链证书(包含 intermediate CA),不然有些老设备也认不了。

第二个是内网环境,把自签名证书的根证书(注意不是服务器证书本身)装到手机系统信任 store 里。iOS 要通过 MDM 或 Safari 扫码安装 .cer 文件后手动进设置信任;安卓不同厂商路径不一样,一般设置里“加密与凭据”或“信任的凭据”里装。装完记得重启浏览器,不然可能不生效。

顺便说一句,别用代码里硬编码跳过证书校验(比如 iOS 里用 NSAllowsArbitraryLoads 或安卓用 TrustAllCertsSocketFactory),虽然能通,但等于把 HTTPS 彻底废了,中间人随便都能劫持,防止注入都防不住,上线前被安全审计打回来是肯定的。

真要赶时间调试,先用 Postman 或 curl 加 -k 参数确认接口本身没问题,别把后端逻辑错误当成证书问题。
点赞 1
2026-02-24 14:05
轩辕依甜
这问题我见过太多次了,核心就是你用的是自签名证书,PC 上可能因为之前手动信任过或者装了根证书,所以能访问,但移动端默认不信任任何非系统内置 CA 签发的证书。

ERR_CERT_AUTHORITY_INVALID 这个错误说明证书链不被信任,移动端比 PC 更严格,不会弹出“继续访问”的按钮,直接就挂了。

一般这样处理:

1. 把你的自签名证书换成正规 CA(比如阿里云、腾讯云、Let’s Encrypt)签的免费 DV 证书,最省事,移动端秒过;
2. 如果必须用内网自签名,那得把你的根证书(注意是根证书,不是服务器证书)安装到手机系统级信任库,安卓要手动装(设置里有“安装证书”选项),iOS 要通过描述文件或者扫码安装,装完还得去“设置-通用-关于本机-证书信任设置”里手动打开信任开关,iOS 13 以后这一步必须做;
3. 临时调试可以用 Charles 或 Fiddler 抓包,它们会自动在手机上安装中间人证书,但生产环境千万别这么干;
4. 还有个野路子:后端加个中间层,用合法域名反代你的接口,比如 api.yourdomain.com 指向内网地址,这样前端只接触合法证书就行。

别想着在前端跳过校验,H5 里根本没这权限,Native App 里虽然能配置 NSAppTransportSecurityandroid:usesCleartextTraffic,但苹果审核基本过不了,而且不安全。

总结:生产环境别用自签名,真要内网用,要么装证书要么反代。
点赞 2
2026-02-23 22:00