gpt4 book ai didi

ssl - iOS 8 在我的应用程序中断开了 SSL 连接 - CFNetwork SSLHandshake 失败 (-9806)

转载 作者:太空宇宙 更新时间:2023-11-03 12:39:34 25 4
gpt4 key购买 nike

我的应用只是连接到家用设备上的网络服务器并读取一些 html。它在使用 http 时工作正常,但现在在 iOS 8 上使用 https 时它不起作用。

我使用 AFNetworking v1 并使用这些覆盖方法覆盖 SSL 检查(是的,我知道在正常情况下不应该这样做并且不安全等......,但那是另一个话题)。

[self setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
}];

[self setAuthenticationAgainstProtectionSpaceBlock:^BOOL(NSURLConnection *connection, NSURLProtectionSpace *protectionSpace) {
if([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust]) {
return YES; // Self-signed cert will be accepted
}
// If no other authentication is required, return NO for everything else
// Otherwise maybe YES for NSURLAuthenticationMethodDefault and etc.
return NO;
}];

现在使用 iOS 8 我会收到这样的错误:

CFNetwork SSLHandshake failed (-9806)

CFNetwork SSLHandshake failed (-9806)

CFNetwork SSLHandshake failed (-9806)

NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806)

Error during connection: Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo=0x7b66c110 {NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorCodeKey=-9806, NSErrorFailingURLStringKey=https://xxx.xxx.xxx.xxx:443/live.htm, _kCFStreamErrorDomainKey=3, NSUnderlyingError=0x7c0d8a20 "An SSL error has occurred and a secure connection to the server cannot be made.", NSErrorFailingURLKey=https://xxx.xxx.xxx.xxx:443/Info.live.htm}

我已经尝试切换到 FSNetworking,它有时在设置这个时工作:

- (void)connection:(NSURLConnection *)connection
willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {

if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
{
NSLog(@"Ignoring SSL");
SecTrustRef trust = challenge.protectionSpace.serverTrust;
NSURLCredential *cred;
cred = [NSURLCredential credentialForTrust:trust];
[challenge.sender useCredential:cred forAuthenticationChallenge:challenge];
return;
}
}

但是同时执行 2 个请求,只有 1 个会成功,一个会失败并出现与上述类似的错误。只有 1 个请求似乎达到了 SSL 覆盖点。

任何人都可以阐明这一点以及 iOS 8 中为打破这一点所做的更改,以及我如何修复它?

谢谢

最佳答案

我在 iOS 8 中遇到了同样的问题。

场景:

  1. 调用我们的 https 服务器工作
  2. UIWebView 中从我们的服务器打开 https URL>
  3. 所有 future 的 NSURLConnection 都会因 SSLHandshake 错误而失败

useCredential:forAuthenticationChallenge 在我们随后立即调用 SecTrust* 方法时导致此错误(但仅在打开托管在同一服务器上的 https 中的页面之后)。

此代码触发了错误:

[challenge.sender useCredential:urlCredential forAuthenticationChallenge:challenge];
SecTrustRef trustRef = [[challenge protectionSpace] serverTrust];
CFIndex count = SecTrustGetCertificateCount(trustRef);

但是这个没有:

SecTrustRef trustRef = [[challenge protectionSpace] serverTrust];
CFIndex count = SecTrustGetCertificateCount(trustRef);
[challenge.sender useCredential:urlCredential forAuthenticationChallenge:challenge];

我不清楚为什么这会导致 SSLHandshake 在 iOS 8 而不是 iOS 7 上失败。也许 AFNetworking 在 useCredential:forAuthenticationChallenge 之后做了一些事情导致同样的问题。

关于ssl - iOS 8 在我的应用程序中断开了 SSL 连接 - CFNetwork SSLHandshake 失败 (-9806),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25914248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com