2011-11-04 10 views

Odpowiedz

14

Według Docs z NSURLConnectionDelegate

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

są przestarzałe i nowy kod powinien przyjąć

connection:willSendRequestForAuthenticationChallenge 

Starsi uczestnicy nadal będą nazywane kompatybilności, ale ponieść więcej opóźnień w radzeniu sobie z wyzwaniem uwierzytelniania .

+0

dzięki himanshu. Tak więc, zamiast tych metod, jeśli NSURLConnectionDelegate, powinienem użyć połączenia: willSendRequestForAuthenticationChallenge (w iOS 5). Ale kiedy uruchomię ten kod w wersji innej niż 5.0, to spowoduje błąd. Dobrze?? – anshul

+0

ponownie zgodnie z [Docs] (http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSURLConnectionDelegate) 'Jeśli połączenie : willSendRequestForAuthenticationChallenge: nie jest zaimplementowane, starsze, nieaktualne połączenie metod: canAuthenticateAgainstProtectionSpace :, połączenie: didReceiveAuthenticationChallenge: i połączenie: didCancelAuthenticationChallenge: zamiast tego są wywoływane. " –

+1

Mam implementację nowego, willSendRequestForAuthenticationChallenge, który skonfigurowałem jako delegata, i nie zostaje wezwany. Próbuję omijać używanie samopodpisanego certyfikatu do testowania i otrzymuję żądanie API z błędem: Error Domain = NSURLErrorDomain Code = -1200 "Wystąpił błąd SSL i nie można nawiązać bezpiecznego połączenia z serwerem. "itd. Wyszukiwania wskazują, że ta delegowana metoda powinna pozwolić mi to zrobić, ale delegat nawet nie zostaje wezwany. –

1

Miałem ten sam problem (zobacz mój komentarz powyżej). W moich wyszukiwaniach natknąłem się na tę kwestię: https://gist.github.com/1675763. Próbowałem kodu w ścieżce AUTH_NEW. Delegat wciąż nie był wzywany. Następnie zauważyłem komentarz w wierszu 40: "Być może iOS 5 nie może obsługiwać algorytmu podpisu DSA."

Zrobiłem kilka wyszukiwań i nie znalazłem nic, co wskazywałoby, że ograniczenie było problemem. W końcu, w desperacji, zmieniłem to. Używałem keytool java (nowa wersja opensl +), aby wygenerować certyfikat z podpisem własnym. Domyślnie korzysta z DSA. Z desperacji użyłem flagi, by zmusić ją do użycia RSA. Wtedy delegat został wezwany, a kod w powyższym punkcie zadziałał.

Nadal nie widzę żadnej dokumentacji, która mówi, że nie można używać DSA. openssl domyślnie używa RSA, więc ludzie, którzy go używają, prawdopodobnie nigdy na niego nie wpadną.

Krótka historia: sprawdź swój certyfikat i upewnij się, że jest podpisany przez RSA, a nie DSA.

0

Chciałbym podkreślić znaczenie, jakie czyni Chris Westin. Poza tym faktycznie utworzyłem klucz RSA, ale przypadkowo skopiowałem DSA do serwera. Jeśli masz wątpliwości, musisz użyć polecenia -v (verbose), aby upewnić się, że posiadasz odpowiedni certyfikat. Przykład:

keytool -list -v -keystore <name of keystore here> 
Powiązane problemy