2014-07-25 7 views
6

Wir verwenden DigiCert als unsere CA. Wir haben die CER-Datei mit folgendem Befehl aus:SSL-Pinning mit AFNetworking 2.0 ermöglicht POST-Anfragen unabhängig von der verwendeten Cert-Datei

openssl x509 -in WEBSITE.crt -outform der -out WEBSITE.cer 

die Arbeit sollte aber das Problem ist, dass nicht nur, dass cer Arbeit aber jede Datei, die wir in den Code gesetzt wird funktionieren. Wir haben sogar leere .cer-Dateien getestet und das funktioniert auch. Mit der Arbeit meine ich, dass wir eine Postanforderung an den Server stellen können, unabhängig davon, welche .cer-Datei verwendet wird. Natürlich möchten wir, dass es scheitert, wenn etwas anderes als unser unterschriebenes Zertifikat verwendet wird.

Unser Ursprung ist Cloudflare, der dann zu einem Amazon Load Balancer führt, auf dem unsere Zertifikate installiert sind.

Ich benutze Charles Proxy zu MITM selbst und ich kann es mit oder ohne das Zertifikat in der iOS App tun.

Wir verwenden die neueste Version von AFNetworking, um das SSL-Pinning durchzuführen. Ich subclassed AFHTTPRequestOperationManager und fügte hinzu, die folgende Methode:

+ (AFSecurityPolicy*) siteSecurityPolicy 
{ 
    /**** SSL Pinning ****/ 
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"WEBSITE" ofType:@"cer"]; 
    NSData *certData = [NSData dataWithContentsOfFile:cerPath]; 
    AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init]; 
    [securityPolicy setAllowInvalidCertificates:NO]; 
    [securityPolicy setPinnedCertificates:@[certData]]; 
    [securityPolicy setSSLPinningMode:AFSSLPinningModeCertificate]; 
    /**** SSL Pinning ****/ 

    return securityPolicy; 
} 

Mein Code der Post zu machen, ist wie folgt:

websiteRequestOperationManager *manager = [websiteRequestOperationManager manager]; 

/**** SSL Pinning ****/ 
[manager setSecurityPolicy:[websiteRequestOperationManager siteSecurityPolicy]]; 
/**** SSL Pinning ****/ 

[manager GET:WEBSITE_URL parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary* responseObject) { 
    //code 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    //code 
}]; 

Welche entscheidenden Schritt verpasst haben wir?

Ich sollte auch erwähnen, dass ich NSLog'd:

[manager.securityPolicy.pinnedCertificates count] 

und erhielt einen 1.

+0

Ist nicht Ihr Ziel (verwenden Sie keine CERT zu POST) effektiv Pinning zu brechen? Es scheint mir, dass Sie nur das eine echte Zertifikat oder den öffentlichen Schlüssel für die Verbindung verwenden möchten. Hier ist eine der letzten Fragen zu 'AFNetworking' und Pinning: [AFNetworking pin public key für ein vertrauenswürdiges Zertifikat] (https://stackoverflow.com/questions/24615144/afnetworking-pin-public-key-for-a-trusted- Zertifikat). – jww

+0

Entschuldigung, ich denke, ich muss meine Frage umformulieren. Das GOAL soll nur unser unterschriebenes Zertifikat verwenden. Was passiert, ist es egal, welche Cert-Datei wir verwenden, es ermöglicht einen Beitrag. Also der Prozess, um das Zertifikat des Servers in der App zu cert entspricht nicht. – roninSTI

+0

Wo lade ich '* .cer.pem' Dateien für Cloudflare herunter? – fatuhoku

Antwort

0

Dies auch bei mir der Fall zu sein scheint, AFNetworking 2.3.1 verwenden. AFNetworking 2.1.0 hat dieses Problem nicht, aber das Pinning dort bricht auf iOS 8 Beta 5.

Verwandte Themen