chenchaodev / wsdl2objc

Automatically exported from code.google.com/p/wsdl2objc
MIT License
0 stars 0 forks source link

Problems with Self-signed server certificate #206

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?

I have tried to connect with my server in this way:
1.     MYServiceSoap11Binding *bind = [[MYService MYServiceSoap11Binding] 
retain];
2.     MYService_receiveData *request= [[MY_receiveData new] autorelease];
3.     MYSoap11BindingResponse *resp= [bind receiveDataUsingParameters:request 
];

If I connect to server without certificates is ok, but when I try to connect 
with Self-signed server certificate (https), I have followed the 'Advanced 
Options' instructions.  The connection started with the method 
sendHTTPCallUsingBody:(NSString *)outputBody soapAction:(NSString *)soapAction 
forOperation:(MYServiceSoap11BindingOperation *)operation
of the class MYServiceSoap11Binding as follows:

 NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:operation];
  operation.urlConnection = connection;
    [connection start];

How Operation is delegated of the connection, It have to implement 
-(void)connection:(NSURLConnection *)connection 
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 
that say apple where I send the certificate. But it doesn't implement this 
method. I have to implement it using this code.

- (BOOL)authenticateForChallenge:(NSURLAuthenticationChallenge *)challenge
{
    if ([challenge previousFailureCount] > 0) {        
        return NO;
    }

    NSURLCredential *newCredential = nil;
    NSURLProtectionSpace *protectionSpace = [challenge protectionSpace];
    SecurityCenter *securityCenter = [SecurityCenter sharedInstance];

    // server authentication - NSURLAuthenticationMethodServerTrust
    if ([protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
        SecTrustRef trust = [protectionSpace serverTrust];
        NSArray *anchors = [securityCenter serverAnchors];
        SecTrustSetAnchorCertificates(trust, (CFArrayRef)anchors);
        SecTrustSetAnchorCertificatesOnly(trust, YES);

        SecTrustResultType res = kSecTrustResultInvalid;
        OSStatus sanityChesk = SecTrustEvaluate(trust, &res);

        if ((sanityChesk == noErr) 
            && [self validateResult:res]) {

            newCredential = [NSURLCredential credentialForTrust:trust];
            [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];

            return YES;
        }

        return NO;
    }

    [NSException raise:@"Authentication method not supported" format:@"%@ not supported.", [protectionSpace authenticationMethod]];
    return NO;
}

I`m working with last version of source code in iOS7.

Original issue reported on code.google.com by arritxu....@enigmedia.es on 10 Jan 2014 at 2:56