2017-10-16 151 views
1

在我的應用程序中,我需要調用一些REST API服務調用。部署REST API服務的目標開發服務器上的證書是自簽名的。因此,當我運行應用程序時,出現如下錯誤:如何使用Ionic Cordova框架和自簽名證書繞過iOS 11中的SSL檢查

加載資源失敗:此服務器的證書無效。您可能會連接到假裝爲「192.168.10.20:8080」無效的服務器......這可能會使您的機密信息處於危險之中。

由於此服務器僅用於開發/測試目的,所以我只是想忽略SSL檢查...我如何實現它?我嘗試以下方法: [AppDelegate.m文件],但沒有成功,如下的代碼是不是在iOS的11個工作...

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

我在我的應用程序使用離子3 &科爾多瓦7。

+0

不幸「allowsAnyHTTPSCertificateForHost」的設備11再沒有作品科爾多瓦(WKWebView)。 –

回答

1

有趣的是,我只是研究同樣的問題。看起來像在iOS 11中,事情受到更多限制。我在這裏回答WKWebView。

在本質上,你需要做的:

  • 地方自定義的授權碼到WKWebView插件代碼
  • 負載資源直接從科爾多瓦(然後WKWebView事件被正確觸發)
  • 禁用ATS(NSAppTransportSecurity)

詳細描述

你應該做的細節如下(如果你使用的是WKWebView):

你需要修改CDVWKWebViewEngine.m(插件代碼)。您需要添加有:

- (void)webView:(WKWebView *)webView 
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge 
*)challenge completionHandler:(void (^) 
(NSURLSessionAuthChallengeDisposition 
disposition, NSURLCredential *credential))completionHandler { 
    SecTrustRef serverTrust = challenge.protectionSpace.serverTrust; 
    completionHandler(NSURLSessionAuthChallengeUseCredential, 
    [NSURLCredential credentialForTrust:serverTrust]); 
} 

但是,請注意 - 當WKWebView被初始化(即通過科爾多瓦框架加載)這僅適用。

因此您還需要從API的那個URI加載您的應用程序。我認爲你有本地網絡(自簽名證書),所以這不應該是一個問題。如果你將在本地加載應用程序(即從index.html),那麼這將無法正常工作!

另外,你需要禁用ATS的iOS應用*的.plist設置文件,如:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

這是我的作品。

其他資源:

Disclamer:禁用證書應該避免檢查,只有在你有很好的理由或其他限制的情況下才使用。你仍然有通信安全,但你沒有信任。因此中間人的攻擊是可能的!如果您決定使用此選項,則還應使用證書鎖定來使事情更安全。

+0

@ Peter ..你可以與我分享完整的CDVWKWebViewEngine.m文件..我已經將這個代碼集成到我的程序中,但沒有成功.. –

+0

@KamleshKumar:當然我可以分享,在這裏是:https:// gist .github.com/PeterStegnar/63cb8c9a39a13265c3a855e24a33ca37 –

0

感謝@peter我發現多了一個解決方法在ios11檢查應用程序的測試目的是否API的越來越正確擊中或not.You可以通過在config.xml中

添加下面的標籤強行改變從WKWebView到UIWebView的web視圖
<preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" /> 

現在添加下面的Appdelegate.m代碼文件

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

它爲我工作..!

注:只針對開發/測試purpose.not推薦用於生產部署

+0

此變通辦法的問題在於您使用的是某種不贊成使用的iOS網頁視圖。 Apple建議使用WKWebView:https://developer.apple.com/documentation/webkit/wkwebview。這有很多原因(例如,你有一個觸摸延遲,這是非常糟糕的用戶體驗)。問題是如果你可以爲你的用戶買得起? –