簡體   English   中英

關於 SSL,cordova“發布”的行為與“調試”不同

[英]cordova "release" behaves differently to "debug" regarding SSL

我對cordova有非常困難且完全無法搜索的問題。

--debug模式下完美編譯的程序在--release模式下編譯后停止工作。 我確保來源是相同的,並且效果是恆定的。

--debug build 和--release build 之間的唯一區別是--release build 無法打開任何 SSL 連接

這個問題的范圍很窄,就我而言,它是以下幾行:

Socket = new WebSocket('wss://376.su/');

我的一個朋友在行中報告了同樣的錯誤:

<img src="https://blabla" />;

UPD:問題已解決,請參閱答案。

問題

我已經確定了問題的確切根源,並且找到了完美的解決方案。 結果證明這是兩個獨立問題的疊加,每個問題都具有嚴重的誤導性:

  1. 我從 Thawte 獲得的 SSL 證書(盡管成本很高)未被 Android 5.1.1 識別為有效證書(同時被所有桌面瀏覽器識別)

  2. cordova build--debug標志只是忽略證書“錯誤”(靜默)。

解決方案

轉到您的項目目錄並找到以下文件:

platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java

找到方法定義 ( onReceivedSslError ) 和以下條件:

(appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0

這就是--debug--release不同之處。 為了忽略證書“錯誤”,應執行以下代碼:

handler.proceed();
return;

該文件在構建過程中一直存在。 下次向項目添加平台時,不要忘記忽略這些准錯誤。

問題

Android 無法識別該證書的證書頒發機構 (CA)。 這是一個常見問題,特別是對於較舊的設備,每次出現新 CA 時都會影響每個設備。

解決方案

A. 配置中間證書。

尋找適合您平台的詳細設置。 這里有些例子:

你可以在 StackExchange's Unix 的這個問答中閱讀更多關於它的信息

B. 使用信任層次鏈接證書。

利用信任層次結構功能,您可以鏈接證書。

您可以使用以下工具來利用這項工作: https : //whatsmychaincert.com/

或者您可以自己完成,因為它只是文本文件(證書)的串聯:

Linux / macOS 的示例步驟

  1. 將權威的證書與您的證書連接起來。 這樣,您將首先發送您的 CA 證書,以確保設備您的域證書之前信任您的 CA。

    如果你有單獨的證書,這個 shell 命令可以解決問題:

     $ cat authority1.cert authority2.cert authority3.cert your_domain.cert >> your_domain_bundle.cert

    或者,如果您有一個ca-bundle文件,即證書的串聯,只需運行:

     $ cat authority.ca-bundle your_domain.cert >> your_domain_bundle.cert
  2. your_domain_bundle.cert添加到服務器。

解決了任何 ssl 協議、 httpswss等的問題。

我有同樣的問題,但主要來源不是代碼 SystemWebViewClient.java。 你的帖子幫助我找到了確切的來源。 實際上,主要來源是您嘗試訪問的 https 站點缺少 Cordova 連接到安全站點所需的證書頒發機構 (CA)。 實際上,我正在使用基於 Ionic/Cordova 構建的 Siberian CMS。

您可以使用https://www.sslshopper.com/ssl-checker.html#hostname=檢查該站點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM