와일드 카드 TLS 인증서 (예 : ".domain.com")가있는 서버에 NSURLConnection
을 연결하고 NSURLConnectionDelegate
의 SecTrustEvaluate
을 -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
과 동일한 기능을 수행합니다.
좋습니다. 인증서에는 제목 섹션의 "* .domain.com"이름이 일반 이름으로 나열됩니다. 주체 대체 이름 섹션에는 여러 IP 주소가 나열됩니다. 우리 서버 멤버가 SAN 섹션에서 와일드 카드 이름을 나열하는 인증서를 생성하도록 할 수 있는지 확인합니다. – Greg
주체 대체 이름 섹션에 와일드 카드를 추가하면이 문제가 해결 된 것으로 보입니다. 감사! – Greg