2012-02-23 8 views
6

I wann controllare che il cetificate SSL sia presente nell'URL vuole anche controllare la sua versione e il tipo di convalida.Come verificare la sicurezza del certificato SSL in iOS?

Ho creato un'applicazione in cui sto chiamando i metodi delegati NSURLConnection per inviare la richiesta su un server.

Utilizzato anche il metodo "canAuthenticateAgainstProtectionSpace", ma questo metodo non viene chiamato una volta stabilita la connessione.

Qualcuno può dirmi come raggiungere questo obiettivo.

risposta

9

iOS non fornisce un accesso molto granulare alle informazioni del certificato. Hai due scelte: API private o crea il tuo valutatore con OpenSSL.

È possibile visualizzare le funzioni di certificato private nel opensource code. La versione è disponibile da SecCertificateVersion(). Non sono sicuro di cosa intenda per "tipo di convalida" qui.

Per fare ciò con OpenSSL, è possibile ottenere i dati DER con SecCertificateCopyData() e quindi analizzare tutto da soli.

Suggerisco di aprire un radar (bugreporter.apple.com) su questo problema. La mancanza di accesso alle informazioni di base sul certificato è un problema serio.

Se siete alla ricerca di codice di esempio che estrae il certificato dalla NSURLConnection, vedere la Chapter 11 sample code da iOS:PTL:

- (void)connection:(NSURLConnection *)connection 
    willSendRequestForAuthenticationChallenge: 
    (NSURLAuthenticationChallenge *)challenge 
{ 
    NSURLProtectionSpace *protSpace = challenge.protectionSpace; 
    SecTrustRef trust = protSpace.serverTrust; 
    ... 
    SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, 0); 
    ... 

A questo punto, cert detiene il certificato foglia.

+0

Grazie per il tuo suggerimento. "Tipo di convalida" indica quale tipo di convalida di SSL è implementato nell'URL, Convalida standard o estesa. Qui ho usato il codice fornito in "Capitolo 11 codice di esempio" ma quando sto provando a costruire l'app sto ricevendo errori di compilazione a -> Simboli indefiniti per l'architettura i386: "_SecPolicyCreateBasicX509", referenziato da: _RNSecTrustEvaluateAsX509 in ConnectionViewController.o, "_SecCertificateNotValidAfter", a cui si fa riferimento da: - [ConnectionViewController connection: willSendRequestForAuthenticationChallenge:] in ConnectionViewController.o – iLearner

+2

È necessario collegare Security.framework. –