HTTPS için kendinden imzalı SSL sertifikaları kullanan bir sunucum var. Uygulamamda kendim imzalı kök sertifika var. NSURLSession
, -URLSession:didReceiveChallenge:completionHandler:
delege yönteminde SecTrustSetAnchorCertificates()
kullanarak kendinden imzalı kök sertifikayı kullanmak ve doğrulamak için alabiliyorum.HTPPS ve kendinden imzalı sunucu sertifikalarıyla AVPlayer'ı nasıl kullanabilirim?
Bunu, AVPlayer
ile denediğimde, bir SSL hatası alıyorum ve oynatma başarısız oluyor. Bu benim AVAssetResourceLoader
temsilci uygulamasıdır:
- (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;
}
temsilci çağrılır ve trustResult
beklendiği gibi ("açık kullanıcı kodları olmadan, güvenilir" anlamına gelir) kSecTrustResultUnspecified
eşittir.
Hata Alan = NSURLErrorDomain Kodu = -1200 "Bir SSL hata oluştu ve sunucuya güvenli bağlantı yapılamaz": Ancak, oynatma
AVPlayerItem.error
aşağıdaki kısa bir süre sonra başarısız UserInfo = {NSLocalizedRecoverySuggestion = Sunucuya yine de bağlanmak ister misiniz ?, NSUnderlyingError = 0x16c35720 {Hata Etki Alanı = NSOSStatusErrorDomain Code = -1200 "(null)"}, NSLocalizedDescription = SSL hatası oluştu ve sunucuya güvenli bir bağlantı kurulamadı }
SSL el sıkışmasını kabul etmek için AVPlayer
nasıl edinebilirim?
Bunun aslında bir aygıtta iyi çalıştığını anladım, ancak iOS simulator_'ında, en azından iOS 9.3.x sürümünde tuhaf ve öngörülemeyen şekillerde başarısız olur. IOS 10'da henüz test olmadım. –
Burada aynı sorun, benim uygulama iOS 10 ile çalışmak için durdu, bazı Apple mühendis ile çözmek için bir "Teknik Destek Olayı" açtım. Bu sorunu çözmeyi başarırsa, çözümü buraya gönderirim. – Sylverb
Apple'ın mühendisinden TSI'mın cevabı: Muhtemelen bir böcek, daha fazla araştırma için bir radarı doldurmalıyım. – Sylverb