iOS上的离子自签名https证书异常

时间:2018-06-26 07:45:09

标签: ios ionic-framework https ssl-certificate afnetworking

我们正在开发一种基于离子的混合移动应用程序,以从服务器获取数据并将其显示在应用程序中。 我们有一个自签名证书可以查询我们的服务器。我们将.cer文件放置在iOS的xcode project-> target中。 它为使用证书的https查询提供了例外。

我们的开发环境版本如下: 离子版本3.20.0

我们正在为http使用以下插件。 https://ionicframework.com/docs/native/http/

离子代码如下

let head = {
      'Access-Control-Allow-Origin' : '*',
      'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT',
      'Accept':'application/json',
      'content-type':'application/json'
    }


this.http.enableSSLPinning(true).then(data =>{
  console.log("SSL success");
 })
 .catch(error =>{
   console.log("SSL error");
 });
 this.http.acceptAllCerts(true);
 this.http.setDataSerializer("json");
    this.http.post(this.getProfileURL, requestData, head)
  .then(data => {
console.log("success");
  resolve(JSON.parse(data.data));
  })
  .catch(error => {
   reject(error.error);

  });
});

此代码在Android而非iOS上有效 它给出以下错误: *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* -[__ NSArrayM insertObject:atIndex:]:对象不能为空'

问题: 1.证书的位置是否正确? (我们已将.cer文件放置在iOS的xcode project-> target中。) 2.我们应该使用哪种证书类型-.cer,.der,.pem? 3.如何解决NSInvalidArgumentException?

在此方面的任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题,我的问题是证书的格式。 最初的格式是 PEM,在 iOS 中你需要使用 DER 格式。

如果是这种情况,您可以使用以下 open_ssl 命令轻松转换您的证书:

openssl x509 -outform der -in myCertificate.cer -out myFormattedCertificate.cer

提示:如果您在文本编辑器(例如 Sublime Text)中打开证书,则可以轻松检查您的证书是否为 PEM 格式。你会看到它以这样的开头:“-----BEGIN CERTIFICATE-----”