2017-10-16 8 views
1

In meiner App muss ich einige REST-API-Serviceaufrufe aufrufen. Das Zertifikat auf dem Zielentwicklungsserver, auf dem REST-API-Dienste bereitgestellt werden, ist selbstsigniert. Wenn ich eine App starte bekomme ich einen Fehler wie:So umgehen Sie die SSL-Überprüfung in iOS 11 mit dem Ionic Cordova-Framework und dem selbstsignierten Zertifikat

Fehler beim Laden der Ressource: Das Zertifikat für diesen Server ist ungültig. Sie könnten eine Verbindung zu einem Server herstellen, der vorgibt, "192.168.10.20:8080" ungültig zu sein ... was Ihre vertraulichen Informationen gefährden könnte.

Da dieser Server nur für dev/Testzweck ist, möchte ich einfach ssl check ignorieren ... Wie kann ich es erreichen? Ich habe versucht, wie folgt: [AppDelegate.m Datei], aber nicht wie im folgenden Code gelang es funktioniert nicht in iOS 11 ...

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

Ich bin mit ionischen 3 & Cordova 7 in meiner app.

+0

Leider "allowsAnyHTTPSCertificateForHost" funktioniert nicht mehr in iOS 11 für cordova (WKWebView). –

Antwort

1

Interessanterweise erforsche ich gerade das gleiche Problem. Sieht so aus, als wären die Dinge in iOS 11 etwas eingeschränkter. Ich antworte hier für WKWebView.

Im Wesentlichen müssen Sie tun:

  • Ort benutzerdefinierte Auth-Code zum WKWebView Plugin-Code
  • Last, direkt von Cordova (dann WKWebView Ereignisse ordnungsgemäß ausgelöst wird)
  • disable ATS (NSAppTransportSecurity)

Detailbeschreibung

Was Sie im Detail tun sollten, ist Folgendes (wenn Sie WKWebView verwenden):

Sie müssen CDVWKWebViewEngine.m (Plugin-Code) ändern. Sie müssen dort hinzuzufügen:

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

ist jedoch beachten - das funktioniert nur, wenn WKWebView initialisiert wird (das heißt über cordova Rahmen geladen).

So Sie müssen Ihre Anwendung auch von dieser URI laden, wo API ist. Ich nehme an, Sie haben ein lokales Netzwerk (selbstsigniertes Zertifikat), das sollte also kein Problem sein. Wenn Sie Anwendung lokal laden (d. H. Aus index.html), wird dies nicht funktionieren!

Zusätzlich benötigen Sie iOS ATS in Anwendung * .plist Einstellungsdatei wie zu deaktivieren:

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

Dies ist, was für mich funktioniert.

Zusätzliche Ressourcen:

Disclamer: Deaktivieren Zertifikat Check sollte vermieden werden, verwenden Sie dies nur, wenn Sie einen sehr guten Grund oder andere Einschränkungen haben. Sie haben immer noch Kommunikationssicherheit, aber Sie haben kein Vertrauen. Daher sind Männer im mittleren Angriff möglich! Wenn Sie sich für diese Option entscheiden, sollten Sie auch die Zertifikatsperrung verwenden, um die Sicherheit zu erhöhen.

+0

@ Peter..können Sie komplette CDVWKWebViewEngine.m Datei mit mir teilen .. Ich habe diesen Code in mir integriert, aber nicht gelungen .. –

+0

@KamleshKumar: Natürlich kann ich teilen, hier ist es: https: // gist .github.com/PeterStegnar/63cb8c9a39a13265c3a855e24a33ca37 –

0

Dank @ Peter ich noch eine Abhilfe für die Überprüfung App in ios11 für Testzwecke gefunden haben, ob APIs werden immer

durch Zugabe von unten Tag in config.xml richtig oder not.You treffen kann gewaltsam die Webansicht von WKWebView zu UIWebview ändern
<preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" /> 

fügen nun folgenden Code in Appdelegate.m

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

Datei, die es für mich gearbeitet ..!

Hinweis: nur für dev/Prüfung purpose.not für Produktionsimplementierungen empfohlen

+0

Das Problem dieser Problemumgehung besteht darin, dass Sie eine veraltete Webansicht für iOS verwenden. Apple empfiehlt, WKWebView zu verwenden: https://developer.apple.com/documentation/webkit/wkwebview. Es gibt eine Menge Gründe dafür (zum Beispiel, Sie haben eine Touch-Verzögerung, was wirklich eine schlechte Benutzererfahrung ist). Die Frage ist, ob Sie es sich mit Ihren Nutzern leisten können. –

Verwandte Themen