2016-04-23 58 views
7

調試apk工作正常,這排除了通常的嫌疑犯,但是當我建立,簽署,安裝發行版本,沒有https http http調用可以通過角(http到我允許進行調試的同一端點工作)。安裝HTTPS阻止離子構建 - 釋放android apk

科爾多瓦白名單 ionic plugin add cordova-plugin-whitelist

manifest.xml中包含了正確的指令

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

離子config.xml中包含了正確的指令

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

我的index.html聲明瞭一個許可內容安全政策:

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

我還使用兩種不同的在線SSL檢查器檢查了我的中間證書鏈 - 它們都很好。

我完全難住。有任何想法嗎?

回答

4

重新申請SSL證書時要特別小心,以包含中間證書。

儘管https://cryptoreport.websecurity.symantec.com/checker/和另外三個SSL檢查程序說我的SSL證書沒問題,但爲了安全起見,我重置並配置了我的AWS Elastic Load Balancer SSL設置,以確保我們包含(可選但不是可選的)中間證書,之後問題就消失了。

+0

我們有類似的問題(在某些Android上,但不是其他的,這是令人費解的)。我發現[SSL檢查器](https://www.sslchecker.com/sslchecker)抱怨證書鏈(作爲唯一的SSL檢查器),並且'openssl s_client -showcerts -connect yourhost.com:443'顯示鏈路處於事實上,但打印'驗證返回碼:19(證書鏈中的自簽名證書)'。 –

+0

@ jakub.g我有同樣的問題,並修復它,我不得不通過電子郵件發送我的CA的客戶支持,他們給了我適當的根和中級證書使用。 COMODO在他們的網站上有多個root證書,我只是使用了錯誤的證書。 – chrispytoes

+0

在我們的案例中,問題原來是[Chromium中的一個錯誤](http://android.stackexchange.com/questions/164066/how-to-explain-ssl-cert-validation-discrepancy-between-chrome-and -webview-on-am) - 最後,我們從賽門鐵克證書切換到Comodo證書,並解決了問題 –

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

+0

這不是一個真正的解決方案,而是更多的解決方法。作爲鏈接狀態,你不應該在生產應用程序中使用它。 –

+0

如果在第三方簽名的自我生成證書上發生任何SSL錯誤,這將會忽略。我已經說明了原因。如果SSL不是自簽名的,那麼它不會造成任何錯誤。 –