2013-08-16 11 views
6

Sto tentando di visualizzare un'immagine che è memorizzata su un Amazon S3 Bucket. L'URL è qualcosa come https://s3.amazon.com/..../test.jpg. Ogni volta che faccio questo sul simulatore iPhone, l'immagine viene visualizzata correttamente. Tuttavia, se provo sul dispositivo vero e proprio, continuo a ricevere:Ottenere "Il certificato per questo server non è valido." su iPad durante il caricamento di un'immagine da Amazon S3 (HTTPS), ma nessun errore sul simulatore

errore di dominio = Codice NSURLErrorDomain = -1202 "Il certificato per questo server non è valido Si potrebbe essere la connessione a un server che è . fingendo di essere "s3.amazonaws.com" che potrebbe mettere a rischio le tue informazioni confidenziali ". UserInfo = 0x20007030 {NSErrorFailingURLStringKey = https://s3.amazonaws.com/.../test.jpeg, NSLocalizedRecoverySuggestion = Vuoi per connettersi al server comunque ?, NSErrorFailingURLKey = https://s3.amazonaws.com/.../test.jpeg, NSLocalizedDescription = Il certificato per questo server non è valido. È possibile che il si colleghi a un server che pretende di essere "s3.amazonaws.com" che potrebbe mettere le tue informazioni riservate al rischio . NSUnderlyingError = 0x20014d40 "Il certificato per questo server non è valido. un server che finge di essere “s3.amazonaws.com”, che potrebbe mettere le vostre informazioni riservate a rischio. ", NSURLErrorFailingURLPeerTrustErrorKey =}

Tutte le idee ?!

Grazie!

+0

Cosa succede se provi a caricare l'URL di prova in un browser web? –

+0

Tutto funziona bene! – abisson

risposta

12

mi è stato sempre lo stesso errore di certificato da S3, e abbiamo trovato l'aggiunta di questo al NSURLConnectionDelegate risolto il problema:

-(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] && 
     [challenge.protectionSpace.host hasSuffix:@"example.com"]) 
    { 
     // accept the certificate anyway 
     [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 
    } 
    else 
    { 
     [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
    } 
} 

NOTA: È necessario modificare 'example.com' a un dominio di fiducia o utilizzare un meccanismo più sofisticato di "hasSuffix".

FYI di Apple Technote TN2232 "HTTPS Server fiducia di valutazione" va in gran parte del dettaglio sul perché il certificato è stata respinta e come gestirlo: https://developer.apple.com/library/ios/technotes/tn2232/_index.html

Grazie a Gordon Henriksen per rispondere a questa in https://stackoverflow.com/a/2033823/235229, ma utilizzando una vecchia api.

+0

risposta perfetta, mi hai salvato la giornata. – Logic

0

è anche possibile controllare la data del dispositivo (se erroneamente/di proposito qualcuno lo ha modificato in futuro), nel caso in cui si disponga di un certificato attendibile e continua a dare questo errore.