web-dev-qa-db-fra.com

Je souhaite autoriser des certificats SSL non valides avec AFNetworking

Je souhaite autoriser des certificats SSL non valides . Mon code principal est ci-dessous:

myClient = [[MyClient alloc] init];
[myClient getHtml:@"/path/to/the/distination.html"];

Le code de classe MyClient est ci-dessous:

#import <Foundation/Foundation.h>
#import "AFNetworking.h"

@interface MyClient : NSObject

- (void)getHtml:(NSString *)path;

@end

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_

@implementation MyClient

- (void)getHtml:(NSString *)path
{
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://trusted.server.net"]];
    [httpClient getPath:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"%@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error = %@", error);
    }];
}

@end

J'ai lu la page ci-dessous et essayé la macro mais cela ne fonctionne pas.

Certificat auto-signé SSL · Numéro 189 · AFNetworking/AFNetworkinghttps://github.com/AFNetworking/AFNetworking/issues/189

Aidez-moi, s'il vous plaît...

27
weed

Pour autoriser un certificat SSL non valide avec AFNetworking. Ajoutez la ligne suivante dans AFURLConnectionOperation.h sous #import Availability.h

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1
40
AvtarSingh Suchariya

Dans AFNetworking 2.0, vous pouvez utiliser les éléments suivants:

[AFHTTPRequestOperationManager manager].securityPolicy.allowInvalidCertificates = YES;
45
titaniumdecoy

Vous pouvez maintenant utiliser la propriété allowInvalidSSLCertificate de AFHTTPClient. Pas besoin d'utiliser définit dans les dernières versions de AFNetworking.

AFHTTPClient* client = [AFHTTPClient clientWithBaseURL:@"url"];
client.allowsInvalidSSLCertificate = YES; //this defaults to no
24
David

J'utilise RestKit donc

client.allowsInvalidSSLCertificate = YES;

ne marche pas. L'option n'est pas propagée aux opérations créées par restkit.

J'utilise des cocoapodes afin que toute modification apportée au fichier pch ou au projet de modules soit annulée. Le hack que j’ai utilisé est une opération post-installation de cocoapod qui ajoute la définition requise du préprocesseur. A la fin de mon fichier pod j'ai ajouté:

post_install do |installer_representation|
  installer_representation.project.targets.each do |target|
    if target.name == 'Pods-AFNetworking'
      target.build_configurations.each do |config|
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << '_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1'
      end
    end
  end
end
12
Sebastien Windal

Notez que si vous installez avec CocoaPods, #define- cette macro dans votre projet ne suffira pas - la macro du compilateur doit être définie lors de la compilation de la bibliothèque statique pour que celle-ci soit effective.

8
mattt

Voici comment procéder à l'aide du gestionnaire pour une opération POST.

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //initialize
 manager.securityPolicy.allowInvalidCertificates=YES;    //allow unsigned
 manager.responseSerializer=[AFJSONResponseSerializer serializer];   //set up for JSOn  
 [manager POST:@"myweb.com" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
     //success stuff
 }failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     //error stuff
}];

EDIT - version Swift:

    var securityPolicy = AFSecurityPolicy()
    securityPolicy.allowInvalidCertificates = true;
    manager.securityPolicy = securityPolicy;
    manager.POST(
        "https://exmaple.com/foobar.php",
        nil,
    ...
5
user3344717

Vous devez sous-classer AFHttpClient et remplacer 

- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request 
                                                success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                                                failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

Ceci est mon code.

- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest success:(void (^)(AFHTTPRequestOperation *, id))success failure:(void (^)(AFHTTPRequestOperation *, NSError *))failure
{
    AFHTTPRequestOperation *operation = [super HTTPRequestOperationWithRequest:urlRequest success:success failure:failure];

    [operation setAuthenticationAgainstProtectionSpaceBlock:^BOOL(NSURLConnection *connection, NSURLProtectionSpace *protectionSpace) {
        return YES;
    }];
    [operation setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) {
        if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
            [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
        }
    }];
    return operation;
}

vous utilisez ce httpclient et il peut accéder avec succès au Web auto-signé.

4
jasonhao

J'ai étendu AFHTTPSessionManager dans mon code. Lors des tests sur un serveur de test, tout ce dont j'ai besoin est d'ajouter une seule ligne, comme ceci:

mySessionManager.securityPolicy.allowInvalidCertificates = YES;
4
Donald

AFHTTPRequestOperation * operation = [[AFHTTPRequestOperation alloc] initWithRequest: urlRequest]; operation.securityPolicy.allowInvalidCertificates = YES;

3
aqavi_paracha

si vous utilisez RestKit en utilisant

client.allowsInvalidSSLCertificate = YES;

ne fonctionnera pas, faites plutôt ceci:

dans votre projet, cliquez sur RestKit.xcodeproj, sélectionnez Projet> Paramètres de construction> Macros de préprocesseur

et ajoutez _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1

c'est fini.

2
Hashem Aboonajmi

si vous utilisez RestKit en utilisant

client.allowsInvalidSSLCertificate = YES;

ne fonctionnera pas, faites plutôt ceci:

si vous avez ajouté manuellement Rest Kit à votre projet, cliquez sur RestKit.xcodeproj, sélectionnez Projet> Paramètres de construction> Macros de préprocesseur.

et ajoutez _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1

c'est fini.

1
Hashem Aboonajmi

Ceci est la meilleure méthode pour autoriser des certificats SSL non valides avec AFNetworking.

utilisez add a _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ pour 

projet> Paramètres de construction> Macros de préprocesseur et ajoutez-le à Debug entrée.

J'espère que ça aide

1

J'ai rencontré le même problème et aucune des solutions que j'ai lues ne fonctionne.

Pour moi, la seule solution consiste à définir la AFSecurityPolicy comme ceci:

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;

J'ai décidé de répondre alors que la question est ancienne, peut-être aider quelqu'un.

0
Massimo Polimeni