IPv6更改后,iOS应用突然无法通过HTTPS连接

时间:2016-09-20 23:31:20

标签: objective-c xcode server nsurlsession ipv6

并提前致谢。

我的应用程序中的一切都运行良好,基本上完成了。应用程序已完成,自定义VPS服务器已设置为后端。然后,阅读Apple提交指南,我确保我的服务器与IPv6兼容。

现在我突然无法通过HTTPS连接到我的服务器。它仍可通过HTTP连接(如果我返回并更改URL)。此外,我可以在IPv6更改之前通过HTTPS进行连接。

现在我在Xcode控制台中收到此错误:

--- NSURLConnection / CFURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)---

我一直在阅读有关变通办法的其他帖子,但我想保持我的应用程序合法。它早先在HTTPS上工作,我不明白为什么IPv6的改变会导致这种情况。我知道我可以修改应用程序传输安全密钥,但我希望这可以用于生产,我不希望Apple拒绝。

它不是一个自签名证书,一切都完全正常运作。

我联系了我的服务器公司,他们不确定是什么问题。

我正在使用NSURLSession,典型的连接看起来像这样(除了你在下面看到的内容之外,我还没有实现任何NSURLSession委托方法或自定义)。

//VALUES TO BE POSTED
NSMutableString *post = [NSMutableString stringWithFormat:@"u=%@&p=%@", username, password];


//PERCENT ESCAPE THE URL
[post setString:[post stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];


//CONVERT POST VALUES TO DATA
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];


//RETRIEVE LENGTH OF DATA FOR PURPOSES OF POST HEADER
NSString *postLength = [NSString stringWithFormat:@"%d", (int)[postData length]];


//BUILD THE URL REQUEST
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"https://www.example.com/"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];



//CREATE SESSION FOR SERVER CONTACT
NSURLSessionDataTask *sessionTask = [[NSURLSession sharedSession] dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {


 AND SO ON....

1 个答案:

答案 0 :(得分:1)

根据错误代码判断,我非常确定您的服务器在IPv6模式下配置不正确,并且不能提供完整的证书链(缺少或不正确的中间证书)。当然,在不知道服务器名称的情况下,我无法确认,但您可以查看:

openssl s_client -connect host:443

看看它说的是什么。当然,如果它尝试通过IPv4连接......您可能必须使用IPv6地址而不是主机名。我从来没有尝试过使用IPv6的s_client,所以YMMV。 : - )