web-dev-qa-db-fra.com

Autoriser un certificat SSL non vérifié dans UIWebview

J'intègre un site Web dans un UIWebView. Au cours du développement, je l'ai signalé à localhost. Le problème est que chaque fois qu'il frappe une URL "https: //", il ne se charge pas. Lorsque je charge l'URL dans le safari mobile, je reçois cette fenêtre contextuelle:

enter image description here

Existe-t-il un moyen de remplacer cela par UIWebView pour autoriser l'URL non vérifiée?

25

La réponse de Nick empêchera votre application d'être acceptée par Apple dans l'App Store et la réponse de George ne chargera pas le reste d'une page contenant .css ou .js ou tout autre téléchargement secondaire. Il existe une réponse complète ici qui permet à UIWebView de charger des pages d’un site avec un certificat non approuvé.

8
Prof Von Lemongargle

S'il ne s'agit que de tests en cours de développement, vous pouvez créer une catégorie sur NSURLRequest et remplacer la méthode privée suivante:

#if DEBUG

@implementation NSURLRequest (NSURLRequestWithIgnoreSSL) 

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host
{
    return YES;
}

@end

#endif

Il suffit de le placer n’importe où dans l’un de vos fichiers .m (par exemple, un délégué d’application) ou dans son propre fichier .m. Vous n'avez pas besoin d'un fichier d'en-tête correspondant.

Le #if DEBUG est une précaution pour vous éviter de le laisser activé par inadvertance lors de la soumission à Apple, mais si vous en avez besoin dans une version validée, supprimez-le (et n'oubliez pas de le restaurer ou de supprimer cette catégorie Pomme).

59
Nick Lockwood

Version Swift 3/4 pour la réponse de Nick Lockwood.

Ceci est juste à des fins de test/développement:

extension NSURLRequest {
    #if DEBUG
    static func allowsAnyHTTPSCertificate(forHost Host: String) -> Bool {
        return true
    }
    #endif
}
9
Olexiy Pyvovarov

Dans iOS 9, les connexions SSL échoueront pour tous les certificats non valides ou auto-signés. Il s'agit du comportement par défaut de la nouvelle fonctionnalité App Transport Security dans iOS 9.0 ou version ultérieure, et sous OS X 10.11 ou ultérieure.

Vous pouvez remplacer ce comportement dans le Info.plist en définissant NSAllowsArbitraryLoads sur YES dans le dictionnaire NSAppTransportSecurity. Cependant, je vous recommande de remplacer ce paramètre à des fins de test uniquement.

 enter image description here

Pour plus d'informations, voir App Transport Technote ici .

8
johnnieb

En utilisant les deux méthodes ci-dessous, nous pouvons autoriser le SSL non vérifié dans UIWebview

-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

J'ai expliqué en détail comment y parvenir ici

3
Durai Amuthan.H

Il existe un moyen de le faire légalement (du moins selon les lois de l'App Store). Lorsque vous utilisez NSURLConnection, vous pouvez utiliser deux méthodes pour autoriser l'utilisation de certificats SSL auto-signés:

Comment utiliser NSURLConnection pour se connecter avec SSL pour un certificat non approuvé?

Si vous implémentez UIWebViewDelegate, utilisez le 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

Renvoyez NON à cela pour que la WebView ne se charge pas d'elle-même. Construisez ensuite un NSURLConnection (qui peut être utilisé avec des certificats non signés via le lien ci-dessus).

Bien sûr, les recommandations SSL habituelles s'appliquent ici:
- N'utilisez pas de certificat non signé sur des serveurs de production!
- Mettez toujours en garde un avertissement laissant à votre utilisateur le choix d'accepter ou non le certificat.

2
George

Je sais que c'est un peu tard, mais cela peut aider les autres. J'ai trouvé un article pour contourner le ssl dans l'application iOS. Tout ce que vous avez à faire est de configurer votre vue Web et de faire une demande de publication d'une application sur votre serveur et si vous obtenez une erreur ssl signifie que vous n'avez pas de certificat valide sur votre serveur. Pour éviter cela, vous devez utiliser les méthodes de délégués Webview qui sont 1.) Peut s'authentifier sur un espace de protection 2.) Devrait démarrer le chargement avec request 3 .) Vous pouvez copier ces fonctions à partir de cette URL , Pour moi, cela fonctionne plutôt bien. J'espère que ça aide

0
Emy Stats