Por que o certificado SSL curinga do meu servidor está sendo rejeitado?

Estou usando umNSURLConnection para conectar-se a um servidor com um certificado TLS curinga (como "* .domínio.com") e quando eu ligarSecTrustEvaluate no meuNSURLConnectionDelegateé-connection:willSendRequestForAuthenticationChallenge: método, o certificado é rejeitado como inválido. Outro servidor que possui um certificado TLS totalmente especificado (como "server2.domain.com") é aceito. Ambos os certificados são emitidos pela mesma autoridade de certificação e eu adicionei o certificado à lista de certificados confiáveis do meu dispositivo.

Estou vendo o mesmo comportamento do Safari no meu iPhone / iOS 8.1. O servidor com o certificado curinga é relatado como tendo um certificado não confiável, enquanto o outro servidor funciona bem. Parece que a verificação de certificado padrão do iOS rejeita certificados curinga. É esse o caso?

Existe uma maneira de dizerSecEvaluateTrust permitir certificados curinga? Aqui está um trecho do meu-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
      }
    }
  }
}

EDITAR A versão Android do nosso software aceita os certificados curinga, então eu suspeito que haja algo específico na manipulação de certificados do iOS que está acontecendo aqui. O cliente Android está usandoBrowserCompatHostnameVerifier para verificar o certificado, que, pelo que entendi, desempenha a mesma função queSecPolicyCreateSSL - executando a mesma verificação no certificado que um navegador faz.

questionAnswers(1)

yourAnswerToTheQuestion