Mam serwer, który używa samopodpisanych certyfikatów SSL dla HTTPS. Mam samopodpisany certyfikat główny dołączony do mojej aplikacji. Mogę uzyskać NSURLSession
, aby użyć i zweryfikować certyfikat z podpisem własnym z podpisem SecTrustSetAnchorCertificates()
w metodzie delegata .Jak mogę używać odtwarzacza AVP z certyfikatami HTTPS i certyfikatami z podpisem własnym?
Kiedy próbuję tego z AVPlayer
, otrzymuję błąd SSL i odtwarzanie nie powiedzie się. To jest moja realizacja AVAssetResourceLoader
delegat:
- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForResponseToAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge.protectionSpace.authenticationMethod isEqual:NSURLAuthenticationMethodServerTrust]) {
SecTrustRef trust = challenge.protectionSpace.serverTrust;
SecTrustSetAnchorCertificates(trust, (__bridge CFArrayRef)self.secTrustCertificates);
SecTrustResultType trustResult = kSecTrustResultInvalid;
OSStatus status = SecTrustEvaluate(trust, &trustResult);
if (status == errSecSuccess && (trustResult == kSecTrustResultUnspecified || trustResult == kSecTrustResultProceed)) {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:trust] forAuthenticationChallenge:challenge];
return YES;
} else {
[challenge.sender cancelAuthenticationChallenge:challenge];
return YES;
}
}
return NO;
}
Delegat zostanie wywołany, a trustResult
przyrównuje do kSecTrustResultUnspecified
(co oznacza „witryna, bez wyraźnej override użytkownika”), zgodnie z oczekiwaniami. Jednak krótko po awarii odtwarzanie z następujących AVPlayerItem.error
:
Błąd Domain = kod NSURLErrorDomain = -1200 „Błąd SSL wystąpiła i bezpieczne połączenie z serwerem nie mogą być wykonane” UserInfo = {NSLocalizedRecoverySuggestion = Czy mimo to chcesz połączyć się z serwerem ?, NSUnderlyingError = 0x16c35720 {Error Domain = NSOSStatusErrorDomain Code = -1200 "(null)"}, NSLocalizedDescription = Wystąpił błąd SSL i bezpieczne połączenie z serwerem nie może być zrobione.}
Jak mogę uzyskać AVPlayer
akceptację uzgadniania SSL?
Od tamtej pory okazało się, że to działa poprawnie na urządzeniu, ale nie zadziałałoby w dziwny i nieprzewidywalny sposób - na symulatorze iOS, przynajmniej w iOS 9.3.x. Nie testowałem jeszcze na iOS 10. –
Ten sam problem tutaj, moja implementacja przestała działać z iOS 10, otworzyłem "Incydent pomocy technicznej", aby spróbować rozwiązać ten problem u jakiegoś inżyniera Apple. Jeśli uda im się rozwiązać ten problem, opublikuję rozwiązanie tutaj. – Sylverb
Odpowiedź na moją TSI od inżyniera Apple: To prawdopodobnie błąd, muszę wypełnić radar w celu dalszego zbadania. – Sylverb