Mam aplikację, która używa ASIHTTPRequest.iOS 5: https (ASIHTTPRequest) przestał działać
I zrekompilowane mojej aplikacji z iOS 5 (SDK: 5.0/Xcode 4.2 Budowa 4D199) i połączeń HTTPS nie z komunikatem o błędzie (tego samego połączenia https prac niepełnosprawnych Fine):
Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0xa8e66e0 {NSUnderlyingError=0xa8ac6c0 "The operation couldn’t be completed. (OSStatus error -9844.)", NSLocalizedDescription=A connection failure occurred}
Z dziennika debugowania włączona:
[STATUS] Starting asynchronous request <ASIFormDataRequest: 0xd96fc00>
[CONNECTION] Request <ASIFormDataRequest: 0xd96fc00> will not use a persistent connection
[STATUS] Request <ASIFormDataRequest: 0xd96fc00>: Failed
[CONNECTION] Request #(null) failed and will invalidate connection #(null)
znalazłem ten powiązany wpis: https://devforums.apple.com/message/537440#537440 które mogłyby EXPL w moim problemie.
opiera się na założeniu, że iOS 5 wolą TLS 1.2, I spróbuj zmienić ustawienie na kCFStreamSocketSecurityLevelTLSv1 w AIHTTPRequest.m
NSDictionary *sslProperties = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithBool:YES],
kCFStreamSSLAllowsExpiredCertificates,
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot,
[NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
kCFNull,kCFStreamSSLPeerName,
kCFStreamSocketSecurityLevelTLSv1, kCFStreamSSLLevel,// my modif
nil];
bez powodzenia. Może moja modyfikacja jest nieprawidłowa?
Szczegóły:
- mam ARC wyłączone
- używam libz.1.2.5.dylib
- zaktualizowałem ASIHTTPRequest tydzień temu.
Nie wiem, czy problem jest historią certyfikatu (jak wersja TLS) czy czymś innym.
każda pomoc/pomysł jest mile widziany!
Zobacz także tę poprawkę: https://github.com/ignaval/asi-http-request/commit/c782abbeb204156d30ecbb902915d1eaf9b10f9e#comments - chcesz dodać właściwość do sprawy validateCertificate = YES również – ckhan
Dla mnie zmiana @ ckhan była wymagane również zanim zadziała na 5.0 – leontx
force 'kCFStreamSocketSecurityLevelTLSv1_2' działa również z tą metodą – ReDetection