uni-app中uni.configMTLS调用https认证后,uni.request()拦截问题
uni-app中uni.configMTLS调用https认证后,uni.request()拦截问题
-
前提是使用的服务端提供的域名证书,因为考虑其他第三方接入会有双向认证问题,所以只考虑使用客户端单向认证,官方文档上描述的是 “https 请求配置自签名证书” ,这个是否有区别?
-
首先使用的是只配置了host和服务端证书的base64格式调用认证 (域名xxx一下)
uni.configMTLS({
certificates:[{
'host':'xxx.xxxsoft.com',
'server': [this.serverBase64]
}],
success: (res) => {
console.log(res)
}
})
无论使用的是匹配host的证书,或者不匹配的证书,返回都是{"errMsg":"configMTLS:ok","code":0}
,这是一个疑惑的地方,不是不匹配的话不是应该返回认证失败?
- 调用uni.configMTLS后,再去调用uni.request做https请求,在证书和host匹配的情况下,android和ios设备都可以正常返回数据。异常情况考虑,手动更换了baidu.com的证书文件,转base64后测试uni.request的https请求,android设备日志输出:
request:fail abort statusCode:-1 java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
ios设备依旧可以正常接收到接口返回,这个是第二个问题,不匹配正常应该返回会被拦截掉。
- 原生客户端android 和 ios分别使用okhttp和AfNetworking做了单向认证测试,更换证书文件后,都会因为不匹配拦截接口返回报错信息
更多关于uni-app中uni.configMTLS调用https认证后,uni.request()拦截问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1
前提是使用的服务端提供的域名证书,因为考虑其他第三方接入会有双向认证问题,所以只考虑使用客户端单向认证,官方文档上描述的是 “https 请求配置自签名证书” ,这个是否有区别?
无区别。 自签名证书= 双向认证
2
无论使用的是匹配host的证书,或者不匹配的证书,返回都是{“errMsg”:“configMTLS:ok”,“code”:0} ,这是一个疑惑的地方,不是不匹配的话不是应该返回认证失败?
这里的返回结果只是证书设置是否成功,只有请求时才会真正校验证书
3
ios 同事稍后看一下
更多关于uni-app中uni.configMTLS调用https认证后,uni.request()拦截问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
好的,等回复~感谢支持
上传一个完整的示例工程我排查一下
回复 3***@163.com: 好的
解决方案:在uni.request请求里面加header{ “Connection”:“close”, }
配置uni.configMTLS后,调用uni.request接口时,是否需要设置sslVerify = true?