2017-10-16 13 views
1

Dans mon application, je dois appeler certains appels de service API REST. Le certificat sur le serveur de développement cible sur lequel les services API REST sont déployés est auto-signé. Donc, quand je cours l'application, je reçois une erreur comme:Comment ignorer la vérification SSL dans iOS 11 à l'aide de l'infrastructure Ionic Cordova et du certificat auto-signé

Impossible de charger la ressource: Le certificat pour ce serveur n'est pas valide. Vous êtes peut-être en train de vous connecter à un serveur prétendant être "192.168.10.20:8080" invalide ..... ce qui pourrait mettre vos informations confidentielles en danger.

Étant donné que ce serveur est uniquement à des fins de dev/testing, je veux simplement ignorer ssl check ... Comment puis-je l'obtenir? J'ai essayé comme suit: [fichier AppDelegate.m], mais n'a pas réussi comme ci-dessous le code ne fonctionne pas dans iOS 11 ...

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

J'utilise ionique 3 & Cordova 7 dans mon application.

+0

Malheureusement "allowsAnyHTTPSCertificateForHost" ne fonctionne plus dans iOS 11 pour cordova (WKWebView). –

Répondre

1

Fait intéressant, je suis juste à la recherche du même problème. On dirait que dans iOS 11 les choses sont un peu plus restreintes. Je réponds ici pour WKWebView.

Essentiellement, vous devez faire:

  • lieu Auth Code personnalisé au code du plugin WKWebView
  • ressource charge directement de Cordova (alors WKWebView événements obtient correctement déclenché)
  • désactiver ATS (NSAppTransportSecurity)

Description détaillée

Ce que vous devez faire en détail est le suivant (si vous utilisez WKWebView):

Vous devez modifier CDVWKWebViewEngine.m (code d'extension). Vous devez y ajouter:

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

Cependant, s'il vous plaît noter - cela ne fonctionne que lorsque WKWebView est initialisé (à savoir par l'intermédiaire chargé cadre de cordova).

Donc, vous devez également charger votre application à partir de cet URI où l'API est. Je présume que vous avez un réseau local (certificat auto-signé), donc cela ne devrait pas poser de problème. Si vous chargez l'application localement (c'est-à-dire depuis index.html), cela ne fonctionnera pas!

De plus, vous devez désactiver iOS ATS dans l'application * fichier de configuration .plist comme:

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

C'est ce qui fonctionne pour moi.

Ressources supplémentaires:

Désistement: La désactivation de certificat vérifier devrait être évité, utilisez ceci seulement si vous avez une très bonne raison ou d'autres restrictions. Vous avez toujours la sécurité de la communication, mais vous n'avez aucune confiance. D'où les hommes dans l'attaque du milieu est possible! Si vous décidez d'utiliser cette option, vous devez également utiliser l'épinglage des certificats pour rendre les choses plus sûres.

+0

@ Peter..can vous partagez le fichier complet CDVWKWebViewEngine.m avec moi .. J'ai intégré ce code dans le mien, mais n'a pas réussi .. –

+0

@KamleshKumar: Bien sûr, je peux partager, ici, il est: https: // gist .github.com/PeterStegnar/63cb8c9a39a13265c3a855e24a33ca37 –

0

Merci @peter j'ai trouvé une autre solution pour le contrôle de l'application dans ios11 pour but de vérifier si les API sont correctement ou se faire frapper avec force not.You peuvent changer le WebView de WKWebView à UIWebView en ajoutant ci-dessous balise dans config.xml

<preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" /> 

ajouter maintenant le code suivant dans Appdelegate.m fichier

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

ça a marché pour moi ..!

Note: uniquement pour dev/test purpose.not recommandé pour les déploiements de production

+0

Le problème de cette solution de contournement est que vous utilisez une vue Web obsolète pour iOS. Apple recommande d'utiliser WKWebView: https://developer.apple.com/documentation/webkit/wkwebview. Il y a beaucoup de raisons à cela (par exemple, vous avez un retard de toucher, ce qui est vraiment une mauvaise expérience utilisateur). La question est de savoir si vous pouvez vous le permettre avec vos utilisateurs? –