2013-11-04 68 views
2

我正在從Worklight版本6.0開始演示,我需要使用iOS和Android中的SSL到Worklight Server。Worklight開發需要簽名的SSL證書嗎?

有什麼方法可以在Worklight服務器中使用自簽名或測試證書嗎?還是我需要購買來自其中一個標準CA的證書,即使是測試/演示?

我見過有關如何在Android系統信任庫中導入我的證書的參考,並且這看起來很有前景,但我沒有看到任何與iOS相同的內容。有許多原生代碼解決方案(完全禁用SSL證書驗證)以及關於哪個解決方案工作/不工作的討論(並且沒有討論iOS 7上仍然可用的工具)。

是否將證書導入Android系統信任庫是開發的最佳方法?

是否有一種簡單的iOS解決方案,允許自簽名或測試證書完全禁用證書檢查?

回答

4

好的。我沒有找到通用的答案,也沒有找到接受特定證書的方式,但在iOS和Android上,可以禁用客戶端證書驗證以進行開發和測試。

在Android中,默認清單是已配置爲,以忽略證書驗證。默認情況下,在AndroidManifest.xml中的應用元素具有屬性:

android:debuggable="true" 

使用此設置,客戶端不驗證服務器提供的SSL證書。所以在Android上,自簽名證書只是默認工作。要記住的重要一點是,當您從開發轉移到生產時,將此屬性設置爲false非常重要。當該屬性設置爲false時,客戶端會驗證服務器提供的證書,因此您需要生產服務器的真實簽名證書。 (有道理)

在iOS中,有幾個建議的解決方案,我正在使用的是將以下內容添加到我的<應用程序名稱>的末尾。M檔:

@implementation NSURLRequest(DataController) 
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host 
{ 
    return YES; 
} 
@end 

從我所收集,這是一個未公開的API,並重寫它是壞的形式,但它的工作原理,這是發展,所以我用它去。

我想我可能很聰明,在盲目返回YES之前檢查我的Worklight Server的主機名,但在任何情況下,上面的代碼的添加都允許我的應用程序使用帶有自簽名證書的SSL worklight服務器。

這些「解決方案」都需要在應用程序投入生產之前刪除,因爲它們使應用程序容易受到中間人攻擊。但是對於開發/早期測試/演示,它們允許使用SSL而不必獲得真正的簽名證書。

+0

希望我在過去知道iOS的這個API ......這很好。 – jnortey

0

是的,你可以通過執行以下操作做到這一點:

  1. 創建一個自簽名的證書將作爲證書頒發機構。
  2. 在iOS設備上安裝此證書(我最簡單的方法是將證書託管在服務器上並訪問Safari中的鏈接,然後下載它)。 iOS設備現在將信任具有已由此證書頒發機構簽名的證書的服務器
  3. 創建由您在步驟1中創建的證書頒發機構簽署的新證書。
  4. 在您的Worklight服務器
+0

我讀這「通過Safari添加證書,然後它會爲你的混合應用工作「在很多地方,但通過我的測試,這是行不通的。該證書已被移動Safari瀏覽器接受,但仍被混合應用拒絕。 –

+0

多數民衆贊成在奇怪的...我已經得到這個工作之前。我會再仔細檢查一下,以證實我的工作。 – jnortey

0

當前Worklight應用程序不適用於自簽名證書。它旨在用於生產,因此它只接受有效的CA證書。

+0

我沒有找到明確接受特定自簽名證書的方法,但我確實找到了禁用客戶端證書檢查的方法。這僅適用於開發/測試,因爲它會使應用程序容易受到中間人攻擊。 –

4

有一種非常簡單的方法可以使用未由已知CA簽名的證書用於開發和測試目的。

請注意,此支持不是來自Worklight。真正取決於每個移動平臺允許您建立這些類型的證書的信任與否。上面David提供的建議實際上只是解決SSL驗證的解決方法,在某些情況下這可能是一種有效的替代方法。然而,android:debuggable標誌只會在你不能覆蓋某些場景,比如直接更新被啓用的情況下。另外,禁用所有形式的SSL驗證,可能並非您在開發/測試環境中真正想要的。

這裏是你可以做什麼:

  1. 首先明白,純粹的自我簽名的證書將不會在iOS和Android平臺工作,只是因爲自己的平臺不允許你安裝這些類型的證書到他們信任庫。
  2. 改爲使用自簽名CA證書。這些都很容易創建。它們與自簽名證書相同,只是它們的CA位已啓用爲TRUE。
  3. 請注意,由某些工具生成的自簽名證書通常不會創建也是CA的證書。確保您的自簽名證書也是一個CA。

      如何創建一個自簽名CA證書
    • OpenSSL的例子:

    OpenSSL的REQ -x509 -nodes -days 365 -newkey RSA:2048 -keyout privateKey.key退房手續certificate.crt

  4. 確保certificate.crt文件是X.509版本3,並且定義了以下擴展:basicConstraints = CA:TRUE
  5. 您可以通過運行以下命令來檢查certificate.crt文件:

    openssl x509 -in certificate.crt -text -noout

  6. 使用此證書作爲您的服務器證書。
  7. 在iOS上,通過電子郵件發送certificate.crt文件或將文件託管在網絡瀏覽器上,您可以手動點擊該文件進行安裝。 (請勿直接從主機WL服務器安裝它,因爲這隻會將其導入瀏覽器空間而不是設備。)
    • 檢查,它被用在設置>通用> Profiles-尋找>安裝配置描述文件
    • 確保iOS的識別並標記是「值得信賴的」
  8. 在Android上可以安裝Android CA Store中的certificate.crt。 certificate.crt可以放在/ sdcard中,可以通過設置>安全>從SD卡安裝證書進行安裝。證書也可以通過發送電子郵件附件或通過瀏覽器下載來打開,如上面的步驟7所示。 Android要求提供證書的別名,請選擇任何名稱。
    • 檢查,它被通過設置下尋找安裝 - >安全 - >受信任的憑據 - >用戶