2014-10-21 1 views
3

와일드 카드 TLS 인증서 (예 : ".domain.com")가있는 서버에 NSURLConnection을 연결하고 NSURLConnectionDelegateSecTrustEvaluate-connection:willSendRequestForAuthenticationChallenge: 메서드로 호출하면 인증서가 유효하지 않은 것으로 거부됩니다. 완전 지정된 TLS 인증서 (예 : "server2.domain.com")가있는 다른 서버가 허용됩니다. 두 인증서는 동일한 CA에서 발급되며 장치의 신뢰할 수있는 인증서 목록에 CA 인증서를 추가했습니다.서버의 와일드 카드 SSL 인증서가 거부되는 이유는 무엇입니까?

내 iPhone/iOS 8.1에서 Safari와 동일한 동작이 나타납니다. 와일드 카드 인증서가있는 서버는 신뢰할 수없는 인증서가있는 것으로보고되고 다른 서버는 정상적으로 작동합니다. iOS의 기본 인증서 확인에서 와일드 카드 인증서를 거부하는 것 같습니다. 이 경우인가요?

SecEvaluateTrust에 와일드 카드 인증서를 허용하는 방법이 있습니까? 여기 내 -connection:willSendRequestForAuthenticationChallenge:

- (void)connection:(NSURLConnection *)connection 
    willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 
    if ([challenge.protectionSpace.authenticationMethod 
     isEqualToString:NSURLAuthenticationMethodServerTrust]) { 
    SecTrustRef trust = [challenge.protectionSpace serverTrust]; 
    SecTrustResultType trustResult; 
    OSStatus status = SecTrustEvaluate(trust, &trustResult); 
    if (status == noErr) { 
     if (trustResult == kSecTrustResultProceed 
      || trustResult == kSecTrustResultUnspecified) { 
     // Success. server2 gets here 
     } else { 
     // Server authentication failure. server1 gets here 
     } 
    } 
    } 
} 

편집 우리의 소프트웨어의 안드로이드 버전은 잘 와일드 카드 인증서를 받아들에서 발췌, 그래서 내가 여기에있는 것입니다 아이폰 OS의 인증서 처리와 관련된 뭔가가있다 생각한다. 안드로이드 클라이언트는 BrowserCompatHostnameVerifier을 사용하여 인증서를 확인합니다.이 인증서는 브라우저가 수행하는 인증서에 대해 동일한 검사를 수행하여 SecPolicyCreateSSL과 동일한 기능을 수행합니다.

답변

4

Safari에서도 동일한 동작을 보이므로 인증서의 문제이거나 인증서가 일치한다고 생각하는 것일 수 있습니다. 인증서의 세부 사항과 액세스 방법을 확인 (또는 게시)하십시오. 예 : *.example.com에 대한 항목 만 포함하는 인증서는 foo.example.com과 일치하지만 example.com 또는 bar.foo.example.com은 일치하지 않습니다. 또한 이름에 대한 정보는 SAN 섹션 (대체 이름)에 있어야하며, 공용 이름의 사용은 가치가 떨어집니다.

+0

좋습니다. 인증서에는 제목 섹션의 "* .domain.com"이름이 일반 이름으로 나열됩니다. 주체 대체 이름 섹션에는 여러 IP 주소가 나열됩니다. 우리 서버 멤버가 SAN 섹션에서 와일드 카드 이름을 나열하는 인증서를 생성하도록 할 수 있는지 확인합니다. – Greg

+0

주체 대체 이름 섹션에 와일드 카드를 추가하면이 문제가 해결 된 것으로 보입니다. 감사! – Greg