uni-app本身不配置SSL证书,证书须由服务器部署;-1错误是TLS握手失败所致,常见于证书不可信、协议不兼容或ATS拦截,需通过manifest.json配置ssl.verify和urlsWhitelist,并确保服务器启用TLS 1.2+及正确加密套件。

uni-app 本身不配置 SSL 证书,证书必须由服务器端部署并生效;客户端(uni-app)只负责正确发起请求、跳过验证(仅开发)、或适配平台限制。
uni.request 报 -1 或 “fail abort” 是 SSL 握手失败的典型表现
这个错误不是 uni-app 的 bug,而是底层网络栈(Android OkHttp / iOS URLSession / 浏览器)在 TLS 握手阶段被阻断。常见触发点:
-
statusCode:-1+errMsg:"request:fail abort":基本可锁定为证书不可信、协议不兼容、或域名未被信任 - H5 正常但 App 端失败:说明问题出在原生容器的 SSL 校验逻辑,而非代码写法
- iOS 白屏/无响应 + 控制台静默:大概率是 ATS(App Transport Security)拦截,未配置
urlsWhitelist或证书不满足 TLS 1.2+
不要先改代码,先确认服务器证书是否能被 Chrome / Safari 正常访问且不报“不安全”。如果浏览器都警告,uni-app 必然失败。
app-plus 平台必须配置 manifest.json 的 ssl 和 urlsWhitelist
Android 和 iOS 在离线打包后,SSL 行为完全由原生层控制,sslVerify: false 在部分版本(尤其离线打包 Android)中会被忽略。必须通过 manifest.json 显式声明:
{
"app-plus": {
"ssl": {
"verify": false
},
"distribute": {
"apple": {
"urlsWhitelist": [
"https://api.example.com"
]
},
"android": {
"urlsWhitelist": [
"https://api.example.com"
]
}
}
}
}
注意:
-
ssl.verify: false仅限开发调试,上线前必须删掉,否则 iOS 可能被 App Store 拒绝,Android 也可能被厂商应用市场拦截 -
urlsWhitelist中的域名必须和uni.request的url完全匹配(协议+域名,不带路径),且必须是 HTTPS - 若用子域名(如
https://v1.api.example.com),需单独列出,通配符*不支持
开发环境连本地 HTTPS 服务总失败?别用 localhost
App 运行在真机或模拟器里,localhost 或 127.0.0.1 指向设备自身,不是你的开发机。必须用局域网 IP:
- 查开发机 IP:
ifconfig(macOS/Linux)或ipconfig(Windows),找inet或 “IPv4 地址”,形如192.168.1.100 - 后端启动时绑定该 IP(例如 Node.js 启动命令加
--host 192.168.1.100),不能只绑localhost - 防火墙放行对应端口(如 3000、8080),macOS 需在「系统设置 → 隐私与安全性 → 防火墙选项」中允许
- 手机和开发机必须在同一 WiFi 下,且路由器未开启 AP 隔离
如果仍失败,临时把后端切到 HTTP(仅限局域网),并确保 manifest.json 中未强制 HTTPS 限制 —— 这能快速验证是不是纯 SSL 问题。
服务器 TLS 版本和加密套件不兼容怎么办
错误信息含 “client and server don’t support common SSL protocol version or cipher suite”,说明握手协议没对上。重点检查:
- 服务器必须启用 TLS 1.2(iOS 强制要求,Android 5.0+ 默认支持);TLS 1.3 更佳,但需确认客户端兼容性
- 禁用 SSLv3、TLS 1.0、TLS 1.1(已被主流平台弃用)
- 加密套件优先选
ECDHE-ECDSA-AES128-GCM-SHA256或ECDHE-RSA-AES128-GCM-SHA256,避免使用RC4、3DES等老旧算法 - 用 SSL Labs Test 扫描你的域名,看评级是否 ≥ B,重点关注 “Handshake Simulation” 表格里各设备是否显示 “Yes”
如果你用的是 Nginx,确认配置里有类似:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
自签名证书或内网 CA 证书无法绕过原生层校验时,Android 离线打包必须把证书文件(.cer)放进 nativeplugins/xxx/android/assets/ 并在 Java 层手动加载 —— 这已超出 uni-app 配置范畴,属于原生集成范畴。











