【问题标题】:HTTPS blocked for Ionic build --release android apkIonic 构建的 HTTPS 被阻止 --release android apk
【发布时间】:2016-04-23 22:44:09
【问题描述】:

调试 apk 工作正常,排除了通常的嫌疑人,但是当我构建、签名、安装发布版本时,角度不能进行 https $http API 调用(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 检查器检查了我的中间证书链——它们都很好。

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

【问题讨论】:

    标签: android cordova ionic-framework


    【解决方案1】:

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

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

    【讨论】:

    • 我们遇到了类似的问题(在某些 Android 上,但在其他 Android 上没有,这令人费解)。我发现 SSL checker 抱怨证书链(作为唯一的 SSL 检查器),openssl s_client -showcerts -connect yourhost.com:443 显示链实际上存在,但打印 Verify return code: 19 (self signed certificate in certificate chain)
    • @jakub.g 我遇到了同样的问题,为了解决这个问题,我不得不通过电子邮件发送给我的 CA 的客户支持,他们给了我正确的根证书和中间证书以供使用。 COMODO 在他们的网站上有多个根证书,而我只是使用了错误的。
    • 在我们的例子中,问题原来是a bug in Chromium - 最后我们从赛门铁克证书切换到 Comodo 证书,它解决了问题
    • 非常感谢!你拯救了我的一天。 2天以来我遇到了麻烦。非常感谢你....
    【解决方案2】:
    Modify this function in SystemWebViewClient.java found in 
    

    平台\android\CordovaLib\src\org\apache\cordova

    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

    【讨论】:

    • 这并不是真正的解决方案,而是更多的解决方法。正如链接所述,您不应在生产应用程序中使用它。
    • 如果第三方签名的自生成证书发生任何 SSL 错误,这将忽略。我已经说明了原因。如果 SSL 不是自签名的,那么它不会造成任何错误。
    猜你喜欢
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多