2014-02-19 3 views
2

나는 Aha가 분명히 빠졌습니다! 내가 CA 나 자체 서명 된 인증서를 사용하여 연구를 해왔고 보안 URL https에 대한 액세스 권한을 얻기 위해 연구를 해왔 기 때문에 나는 그것을 완전히 이해하는 데 여전히 어려움을 겪고 있습니다. 나는 다른 사람들과 코드 및 솔루션을 시도하고 얻는 것에 대해서 주로 실수하고 있습니다. 내 작업, 나는 분명히 근본적인 이해 부족하므로 잘하면 사이트의 denizens 도움이 될 수 있습니다.SSL 인증서 혼동

기본적으로 자체 서명 된 인증서를 사용하는 https 서버와 통신하는 앱이 있습니다.

서버에 액세스하는 데 필요한 인증서와 키는 모두 응용 프로그램의 루트 번들에 저장된 p12에 저장됩니다. 그때 내가 인터넷

NSString *p12Path = [[NSBundle mainBundle] pathForResource:p12Name ofType:@"p12"]; 
NSData *p12Data = [[NSData alloc] initWithContentsOfFile:p12Path]; 
NSError *error = nil; 
NSData *data = [[SFHFKeychainUtils getPasswordForUsername:[[UIDevice currentDevice]name] andServiceName:serviceName error:&error] dataUsingEncoding:NSUTF8StringEncoding]; 
[self transform:data]; 
NSString *pass = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
CFStringRef password = (__bridge CFStringRef)pass; 
const void *keys[] = { kSecImportExportPassphrase }; 
const void *values[] = { password }; 
CFDictionaryRef optionsDictionary = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL); 
CFArrayRef p12Items; 

OSStatus result = SecPKCS12Import((__bridge CFDataRef)p12Data, optionsDictionary,&p12Items); 

if(result == noErr) 
{ 
    CFDictionaryRef identityDict = CFArrayGetValueAtIndex(p12Items, 0); 
    SecIdentityRef identityApp =(SecIdentityRef)CFDictionaryGetValue(identityDict,kSecImportItemIdentity); 

    SecCertificateRef certRef; 
    SecIdentityCopyCertificate(identityApp,&certRef); 

    SecCertificateRef certArray[1] = { certRef }; 
    CFArrayRef myCerts = CFArrayCreate(NULL, (void *)certArray, 1, NULL); 
    CFRelease(certRef); 

    NSURLCredential *credential = [NSURLCredential credentialWithIdentity:identityApp certificates:(__bridge NSArray *)myCerts persistence:NSURLCredentialPersistencePermanent]; 
    CFRelease(myCerts); 

    [[RKObjectManager sharedManager].HTTPClient setDefaultCredential:credential]; 
} 

그리고, 물론이 작동하는 것 같다 발견이 코드를 통해 전화 나 앱 키 체인이 P12를 추가,하지만 난이 그렇지 않으면 그것을

_httpClient = [RKObjectManager sharedManager].HTTPClient; 
[_httpClient setAllowsInvalidSSLCertificate:YES]; 

을 활성화해야 연결하지 못했습니다. 이제 여러 게시물을 보았습니다. 예를 들어 서명 된 인증서를 허용하려면이 설정을 yes로 설정해야하지만, 동시에 다른 게시물은 개발 용으로 만 사용해야한다는 메시지를 보았습니다. 그렇지 않으면 https 완전히 중복. 그리고 명백하게 여분의 보안은 나쁘다. 그래서 나는 그것을 no ...로 설정했다. 그리고 그것은 연결되지 않는다.

정말 누군가가 어떤 링크가 있거나이 재료가 어떻게 작동하는지에 대한 지식을 쌓아서 시간을 허비 할 수 있습니까? 그것은 대단히 감사 할 것이고, 나를 보스로부터 슬픔을 느끼게 할 것입니다.

답변

1

이것은 AFNetworking에서 처리해야하며 'SSL 고정'이라고합니다. 기능을 활성화하고 인증서를 제공하는 방법에 대한 자세한 내용은 문서 here을 확인하십시오. 유용한 정보 here도 있습니다.

+0

답장과 링크를 보내 주셔서 감사합니다. 저는 여전히 천천히 주위를 돌아 다니고 있습니다. 더 많은 사람들이 저를 도우려는 의견을 말하고 있습니다. 다른 사람들도 도움이 될만한 개념을 이해하고이를 코딩하는 방법을 익히 게됩니다. – Genhain