HTTPS阻止Ionic build --release android apk

时间:2016-04-23 22:44:09

标签: android cordova ionic-framework

Debug apk工作正常,排除了常见的嫌疑,但是当我构建,签名,安装发布版本时,没有https $ http API调用可以通过angular(http到同一个端点,我允许调试) ,作品)。

已安装cordova白名单 ionic plugin add cordova-plugin-whitelist

manifest.xml包含正确的指令

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Ionic config.xml包含正确的指令

  <access origin="*"/>
  <allow-navigation href="*" />

我的index.html声明了一个允许的Content-Security-Policy:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

我还使用两个不同的在线SSL检查程序检查了我的中间证书链 - 它们没问题。

我完全难过了。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

重新应用SSL证书,特别注意包括中间证书。

尽管https://cryptoreport.websecurity.symantec.com/checker/和其他三个SSL检查员说我的SSL证书很好,但为了安全起见,我重置并配置了我的AWS Elastic Load Balancer SSL设置,确保我们已经包含了(说明是可选的,但不是可选的)中级证书,之后问题就消失了。

答案 1 :(得分:1)

Modify this function in SystemWebViewClient.java found in 
  

平台\机器人\ CordovaLib \ SRC \组织\阿帕奇\科尔多瓦

public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
  final String packageName = this.cordova.getActivity().getPackageName();
  final PackageManager pm = this.cordova.getActivity().getPackageManager();

  ApplicationInfo appInfo;
  try {
    appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
    if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
      // debug = true
      handler.proceed();
      return;
    } else {
      // debug = false
      // THIS IS WHAT YOU NEED TO CHANGE:
      // 1. COMMENT THIS LINE
      // super.onReceivedSslError(view, handler, error);
      // 2. ADD THESE TWO LINES
      // ---->
      handler.proceed();
      return;
      // <----
    }
  } catch (NameNotFoundException e) {
    // When it doubt, lock it out!
    super.onReceivedSslError(view, handler, error);
  }
}

如果在第三方签名的自生成证书上发生任何SSL错误,这将忽略。 详细阅读here