我正在访问Web服务并在尝试连接时遇到此错误(Web服务是XMLRPC,我使用wordpress xmlrpc源代码进行请求和处理repsonse):
错误域= NSURLErrorDomain代码= -1202“此服务器的证书无效。您可能正在连接到假装为” ** .org“的服务器,这可能会对您造成保密有风险的信息。“
WebService的人说要忽略证书验证部分,所以如果有人知道怎么做,那将对我有很大的帮助。
在一些建议之后我使用了下面的NSURLConnection委托,stil同样的错误
-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
if ([trustedHosts containsObject:challenge.protectionSpace.host])
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
答案 0 :(得分:11)
截至目前,周杰伦给出了正确答案。但是这两种方法现在已被弃用。
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace // deprecated over iOS 5.0. Not even called in iOS 7.0
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge // deprecated over iOS 5.0. Not even called in iOS 7.0
因此,您可以使用该方法:
-(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodServerTrust) {
[[challenge sender] useCredential:[NSURLCredential credentialForTrust:[[challenge protectionSpace] serverTrust]] forAuthenticationChallenge:challenge];
}
}
我使用这段代码来克服下面列出的错误:
错误域= NSURLErrorDomain代码= -1202"此服务器的证书无效。您可能正在连接到假装为“app。*****。com”的服务器,这可能会使您的机密信息面临风险。
答案 1 :(得分:7)
正如aegzorz所说,[NSURLRequest +setAllowsAnyHTTPSCertificate:forHost:]
是私有API,不应在生产代码中使用。由于它是一个私有API,因此它肯定会被App Store拒绝。处理不受信任证书的已发布方式是使用NSURLConnection
委托方法-connection:canAuthenticateAgainstProtectionSpace:
和-connection:didReceiveAuthenticationChallenge:
。
您可以使用这些API做很多事情,处理可以想象的各种身份验证问题。我建议您学习Apple的示例代码AdvancedURLConnections
答案 2 :(得分:4)
我正在使用以下内容在开发中的应用中进行测试:
NSURL* url = // url to webservice
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
请注意,这是私有API ,请勿在生产代码中使用它。
答案 3 :(得分:1)
如果您使用的是AFNetworking
,则可以使用以下代码:
(正如临时客户端解决方案!)
AFHTTPSessionManager * apiManager = [AFHTTPSessionManager initWithBaseURL:[NSURL URLWithString:baseURL];
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
policy.allowInvalidCertificates = YES;
apiManager.securityPolicy = policy;