2011-11-04 29 views
5

Sto usando iOS sdk5.0. Sto premendo un collegamento usando NSURLConnection e creando una richiesta. Ma il mio controllo non sta andando nel metodoReceiveAuthenticationChallenge. IsReceiveAuthenticationChallenge non è stato chiamato in iOS5.0?didReceiveAuthenticationChallenge non viene chiamato

risposta

14

Secondo Docs di NSURLConnectionDelegate

connection:canAuthenticateAgainstProtectionSpace: 
connection:didReciveAuthenticationChallenge: 
connection:didCancelAuthenticationChallenge: 

sono disapprovato e nuovo codice dovrebbe adottare

connection:willSendRequestForAuthenticationChallenge 

I delegati più anziani saranno ancora chiamati per la compatibilità, ma incorrere più la latenza nel trattare con la richiesta di autenticazione .

+0

grazie himanshu. Quindi, al posto di questi metodi se NSURLConnectionDelegate, dovrei usare la connessione: willSendRequestForAuthenticationChallenge (in iOS 5). Ma quando eseguirò questo codice in una versione diversa da 5.0, darebbe un errore. Destra?? – anshul

+0

di nuovo secondo [Docs] (http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSURLConnectionDelegate) 'Se la connessione : willSendRequestForAuthenticationChallenge: non è implementato, la vecchia, obsoleta connessione metodi: canAuthenticateAgainstProtectionSpace :, connection: didReceiveAuthenticationChallenge :, e connection: didCancelAuthenticationChallenge: sono chiamati invece. –

+1

Ho un'implementazione del nuovo, willSendRequestForAuthenticationChallenge che ho impostato come il delegato, e non viene chiamato. Sto cercando di andare in giro usando un certificato autofirmato per il test, e ottengo la richiesta API fallita con errore: Errore Domain = NSURLErrorDomain Code = -1200 "Si è verificato un errore SSL e non è possibile stabilire una connessione sicura al server. ", ecc. Ricerche indicano che questo metodo delegato dovrebbe consentirmi di farlo, ma il delegato non viene nemmeno chiamato. –

1

Avevo lo stesso problema (vedere il mio commento sopra). Nelle mie ricerche, mi sono imbattuto in questo succo: https://gist.github.com/1675763. Ho provato il codice nel percorso AUTH_NEW. Il delegato non veniva ancora chiamato. Poi ho notato il commento sulla riga 40: "Forse iOS 5 non supporta l'algoritmo di firma DSA".

Ho fatto alcune ricerche e non ho trovato nulla che indicasse che questa era una limitazione era un problema. Alla fine, disperato, l'ho cambiato. Stavo usando il keytool di java (la versione reinventata di Java di openssl +) per generare il mio certificato autofirmato. Utilizza DSA per impostazione predefinita. Per disperazione, ho usato una bandiera per forzare l'uso di RSA. Poi il delegato è stato chiamato, e il codice nel gaster sopra funzionava.

Devo ancora vedere tutta la documentazione che dice che non è possibile utilizzare DSA. openssl sembra utilizzare RSA di default, quindi la gente che lo usa probabilmente non si imbatte mai in questo.

Breve storia: controlla il tuo certificato e assicurati che sia firmato con RSA e non con DSA.

0

Vorrei sottolineare il punto che fa Chris Westin. E oltre a questo, ho effettivamente creato una chiave RSA, ma ho copiato accidentalmente la DSA sul server. Quindi, in caso di dubbio, è necessario utilizzare il comando -v (verbose) per accertarsi di avere a disposizione il certificato appropriato. Esempio:

keytool -list -v -keystore <name of keystore here> 
Problemi correlati