Ionic3中使用@ionic-native http实现SSL固定报错求助
Ionic3 SSL固定报错:"You must add at least 1 certificate in order to pin to certificates" 解决
嘿,我之前也踩过这个坑!你现在的问题很直观——你只打开了SSL固定的开关,但完全没告诉插件要使用哪张证书啊!
@ionic-native/http(底层依赖cordova-plugin-advanced-http)的SSL固定逻辑是这样的:必须先明确指定要固定的证书文件,插件才知道去assets文件夹里加载它。光调用enableSSLPinning(true),插件根本找不到要验证的证书源,自然就抛出这个提示了。
修复步骤:
- 确认你放在
platforms/android/assets下的证书文件名(比如是my-server-cert.cer),注意大小写——Android文件系统是区分大小写的! - 在启用SSL固定之前,调用
setSSLCertificates方法指定证书文件(如果有多个可信证书,可以传入数组)。
修改后的代码示例:
private getHtpRequest(url: string){ return new Promise((resolve, reject) => { // 第一步:指定assets目录下的证书文件名 this.htp.setSSLCertificates('my-server-cert.cer'); // 第二步:启用SSL固定 this.htp.enableSSLPinning(true); this.htp.post(url, {}, { 'Content-Type': 'application/json', 'reqId': Math.floor((Math.random() * 1000000) + 1).toString() }) .then( (res: any) => { this.results = res.json(); resolve(this.results) }, (error: any) => { reject(error) }) }); }
额外注意点:
- 如果是iOS平台,证书要放到
platforms/ios/[你的项目名称]/Resources目录下,代码里同样用setSSLCertificates指定文件名即可 - 如果你用的是较旧版本的cordova-plugin-advanced-http,可能方法名是
setCertificate而非setSSLCertificates,可以核对下插件版本的文档 - 确保证书文件本身有效,要是标准的PEM格式.cer文件,别搞错了证书格式
内容的提问来源于stack exchange,提问作者vishnu
相关产品推荐
相关产品推荐

