自建企业内部考试小程序(考拉学习),后端部署在阿里云服务器,使用 Nginx 反向代理 + Express.js。域名 beining.online 已配置 SSL 证书(TrustAsia DV TLS RSA CA 2025)。
现象:
所有 Android 设备、所有 Android 钉钉版本均无法通过 dd.httpRequest 访问后端 API
调用返回 {"error":12,"errorMsg":"SSL handshake aborted"}
iOS 设备登录和所有 API 调用完全正常
Android 设备上的钉钉内置浏览器可以正常打开 https://beining.online(证明证书可信)
IP 直连时错误从 "12" 变为 "无权调用"(证明网络通路正常、DNS 解析正常)
前端接口信息
手机机型:多台 Android 设备均复现(Android 10 / Android 16)
钉钉 App 版本:8.3.23 / 8.3.24,均复现
调用的 API:dd.httpRequest(也尝试过 dd.request、my.request,同样报错)
请求 URL:https://beining.online/exam/api/auth/login
请求方式:POST,Content-Type: application/json
实际返回:{"error":12,"errorMsg":"SSL handshake aborted"}
期望返回:{"code":0,"data":{"token":"...","userId":"...","corpId":"..."}}
关键补充
iOS 设备正常,仅 Android 异常(排除后端代码和业务逻辑问题)
服务器 SSL 配置已通过 openssl 验证(TLS 1.2 + 1.3 均 verify ok,证书链完整)
已排除的问题:
❌ 域名白名单问题(已配置 beining.online 为安全域名)
❌ 代码问题(与排班小程序使用相同的登录逻辑,排班小程序 Android 也无法登录)
❌ DNS 问题(IP 直连后错误变为无权调用,证明 DNS 解析正常)
❌ 证书信任问题(Android 系统浏览器可正常访问)
已尝试但无效的方案:
更换 SSL 证书(Let's Encrypt R13/YR2/YR1、DigiCert、TrustAsia)— 全部 error 12
仅启用 TLS 1.2 / 仅启用 TLS 1.3 — 全部 error 12
调整 cipher suites 多种组合 — 全部 error 12
Nginx ssl_protocols 和 ssl_ciphers 当前配置:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
此前钉钉 AI 开发助理诊断结果:服务器 SSL 配置与钉钉 App Android WebView 网络栈(Conscrypt 库)不兼容
期望
请协助排查 error 12 的根本原因,或提供 Android WebView Conscrypt 库兼容的 SSL 配置方案。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。