2011-05-11 5 views
34

오랜 질문에 대해 미리 사과드립니다. 자체 서명 된 SSL 인증서에 문제가있어 지금까지 시도한 모든 것을 문서화하려고합니다.아이폰 앱에서 자체 서명 된 SSL 인증서 사용

저는 REST 서비스와 통신하는 앱을 만들고 있습니다. 테스트 서버는 문제없이 컴퓨터에 설치할 수있는 자체 서명 된 SSL 인증서를 사용합니다. 설치하는 데 암호가 필요한 .p12 파일입니다. 이 인증서가 설치되어 있지 않으면 서버에 대한 모든 요청은 서버를 반환합니다. 403.

.p12는 "루트 인증 기관"인 "루트 인증 기관", "루트 인증 기관"에서 발급 한 "테스트 사용자"인증서 인 키 체인에 세 가지 항목을 설치합니다. , "테스트 사용자"인증서와 관련된 개인 키가 있습니다.

iPad에 .p12 파일을 이메일로 보내이 인증서를 설치했습니다. 첨부 파일을 탭하고 비밀번호를 입력하면 Safari에서 사이트에 액세스 할 수 있습니다. 안타깝게도 애플리케이션 샌드 박싱으로 인해 내 앱이 REST 서비스와 통신 할 수있는 것은 아닙니다.

내 응용 프로그램에서 REST 서비스와의 모든 통신에 ASIHTTPRequest를 사용하고 있습니다. 각 요청은 ASIHTTPRequest의 서브 클래스입니다. 내가해야만한다는 것을 알게 된 첫 번째 일은 [self setValidatesSecureCertificate:NO];으로 전화하여 서버에 대한 SSL 연결을 시도합니다. 그게 전부라면, 나는 서비스에서 403 오류 코드를 되 찾는다.

이제 인증서 사용 요청을받는 방법을 알아낼 수 없습니다. 나는, 별도의 .cer 파일로 세 가지 항목을 수출 프로젝트에 그들을 포함하여 아래의 코드를 사용하여 요청에 추가 시도했다 :

NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"]]; 
SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)data); 
... 
[self setClientCertificates:[NSArray arrayWithObjects:(id)cert, ..., nil]]; 

코드가이 방법을 사용하여 문제없이 실행하는 동안을, 나는 아직도 얻을 403 오류.

저는 응용 프로그램에 .p12 파일을 포함시키고 동일한 코드를 사용하여 가져 오기까지했습니다. SecCertificateCreateWithData이 nil을 리턴하기 때.에 실패합니다.

나는 내가 여기서 뭘하고 있는지 정말로 모르겠다는 것을 인정한다. 이것은 모두 내 머리 위로 조금이며 누구든지 내게 줄 수있는 도움은 크게 감사하겠습니다.

답변

29

좋아요, 알아 냈습니다. 나는 틀린 나무를 짖고있다.

내가 발견 한 가장 중요한 정보는 Certificate, Key, and Trust Services Programming Guide의 Apple 설명서, 특히 "iOS 용 작업"페이지에 있습니다. .p12 파일에서 보안 ID를 추출하는 방법과 신뢰 예외를 추가하는 방법에 대해 자세히 설명했습니다.

퍼즐의 마지막 부분은 ASIHTTPRequest의 설명서 Client Certificate Support에있었습니다. p12 파일에서 직접 추출한 ID를 사용하여이를 요청에 전달하고 모든 것이 올바르게 인증되도록 할 수있었습니다.

나는 비슷한 기능을 구현해야하는 다른 사용자에게 도움이되기를 바랍니다.

+0

링크가 깨졌습니다.이 링크가 있어야합니다. https://developer.apple.com/library/content/documentation/Security/Conceptual/CertKeyTrustProgGuide/index.html – Oriol

관련 문제