1***@qq.com
1***@qq.com
  • 发布:2026-03-11 16:18
  • 更新:2026-03-11 17:16
  • 阅读:19

uni.configMTLS怎么实现双向认证

分类:HBuilder

uni.configMTLS怎么实现双向认证啊,有sign_cert.cer证书、cert_chain.pem证书链、私钥uni-app,已经用命令生成了.p12文件,使用后报错"errMsg": "request:fail abort statusCode:-1 java.security.cert.CertPathValidatorException: Trust anchor for certification path not found." ,在host中加端口后报错400 No required SSL certificate was sent。需要在network_security_config.xml中配置证书吗?如何处理实现呀`?

``javascript
onLaunch() {
uni.configMTLS({
certificates: [{
'host': 'ezx.xxx.com',
'client': '/static/client.p12',
'clientPassword': '123',
'server': ['/static/cert_chain.pem'],
}],});

2026-03-11 16:18 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

uni.configMTLS 只能用于 App 端(Android / iOS),不支持 HarmonyOS Next,也不支持任何小程序或 H5。
双向认证(mTLS)的完整流程需要同时满足「客户端验证服务器证书」和「服务器验证客户端证书」两件事,下面给出在 uni-app App 端可落地的做法与常见错误排查要点。

一、证书准备

  1. 服务器证书链:把服务器端完整的证书链(根证书 + 中间证书 + 服务器证书)合并到一个 .cer 文件里,命名为 server-chain.cer。
  2. 客户端证书:把 sign_cert.cer + 私钥导出成 client.p12,并记录导出时设置的密码。
  3. 把 server-chain.cer、client.p12 放到项目 static 目录(或打包后能访问到的路径)。

二、代码配置
在 App 启动时调用一次即可(不要重复调用):

// #ifdef APP-PLUS  
uni.configMTLS({  
  certificates: [{  
    host: 'ezx.xxx.com',          // 不要带 https:// 和端口  
    client: '/static/client.p12', // 客户端证书  
    clientPassword: '123',        // p12 的导出密码  
    server: ['/static/server-chain.cer'] // 服务器端完整链  
  }],  
  success(res) {  
    console.log('configMTLS success', res.code);  
  },  
  fail(res) {  
    console.error('configMTLS fail', res);  
  }  
});  
// #endif

三、常见错误与解决

  1. Trust anchor for certification path not found

    • 说明客户端没有把服务器的根证书加入信任链。
    • 把根证书、中间证书、服务器证书按顺序合并成同一个 .cer 文件,放到 server 数组里即可。
    • 如果服务器证书是权威机构签发但仍报此错,检查系统时间是否正确,或把根证书手动加入 server 数组。
  2. 400 No required SSL certificate was sent

    • 服务器开启了「必须验证客户端证书」但客户端没有成功发送。
    • 确认 client.p12 里确实包含私钥和证书;确认 clientPassword 正确;确认 host 与请求地址完全一致(不要带端口)。
  3. 端口问题

    • uni.configMTLS 的 host 只写域名,不要写端口;实际请求时 URL 里可以带端口,如 https://ezx.xxx.com:8443/api

四、network_security_config.xml 不需要额外配置
uni-app 的 runtime 在 Android 端已经使用自定义的 TrustManager 加载你在 uni.configMTLS 中指定的 server 证书,network_security_config.xml 对 uni.request 无效,无需改动。

五、调试建议

  • 先用浏览器或 curl 验证服务器证书链是否完整、客户端证书是否能通过服务器校验。
  • 在真机自定义基座下调试,日志里会打印 SSL 握手详情。
  • 如果仍有问题,把证书链和 p12 在 PC 上用 openssl 验证:
    openssl s_client -connect ezx.xxx.com:443 -CAfile server-chain.cer \  
                   -cert sign_cert.cer -key private.key  

只要证书链和 p12 本身没问题,并按上述方式配置,uni-app App 端即可实现双向认证。

内容为 AI 生成,仅供参考
1***@qq.com

1***@qq.com (作者)

使用了uni.configMTLS(OBJECT)之后,之前封装的uni.uploadFile上传无法使用怎么处理呀?报400

要回复问题请先登录注册