Compartilhar via


Validar um certificado de servidor para a API Gerenciada do EWS

Saiba como criar e referenciar um método de retorno de chamada de validação do certificado para que você possa fazer solicitações de API Gerenciada do EWS para um servidor Exchange.

Por padrão, as versões do Exchange a partir do Exchange 2007 SP1 usam certificados X509 autoassinados para autenticar chamadas do EWS. Ao usar a API Gerenciada do EWS, você precisa criar um método de retorno de chamada de validação do certificado; caso contrário, as solicitações da API Gerenciada do EWS falharão. Se você estiver usando o serviço Descoberta Automática, a chamada para o método de Descoberta Automática da API Gerenciada do EWS falhará com um erro AutodiscoverLocalException. Se você estiver usando um proxy de serviço Web gerado pela Web, talvez também seja necessário criar um método de retorno de chamada de validação, dependendo de como o proxy é criado.

Pré-requisitos para criar um método de retorno de chamada de validação

Para configurar e validar um certificado de servidor, certifique-se de que o seguinte seja verdadeiro:

  • Seu servidor Exchange está usando um certificado autoassinado para o EWS. Se o administrador instalou um certificado válido que rastreia um certificado raiz, você não precisa criar um método de retorno de chamada de validação.

  • Você está criando um aplicativo gerenciado que inclui uma referência aos seguintes namespaces .NET Framework obrigatório:

    • System.Net
    • System.Net.Security
    • System.Security.Cryptography.X509Certificates

Exemplo: método de retorno de chamada para validar um certificado de servidor para a API Gerenciada do EWS

O exemplo de código a seguir mostra como criar um método de retorno de chamada de validação do certificado X509 para a API Gerenciada do EWS. Esse método validará um certificado X509 e retornará "true" somente quando um dos seguintes critérios for atendido:

  • O certificado é válido e localiza um certificado raiz válido.
  • O certificado é válido e autoassinado pelo servidor que o devolveu.

Importante

O método de retorno de chamada de validação do certificado neste exemplo fornece segurança suficiente para o desenvolvimento e teste de aplicativos de API gerenciada do EWS. No entanto, pode não fornecer segurança suficiente para o aplicativo implantado. Você sempre deve garantir que o método de retorno de validação do certificado que você usa atende aos requisitos de segurança da sua organização.

      private static bool CertificateValidationCallBack(
         object sender,
         System.Security.Cryptography.X509Certificates.X509Certificate certificate,
         System.Security.Cryptography.X509Certificates.X509Chain chain,
         System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {
      // If the certificate is a valid, signed certificate, return true.
      if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
      {
        return true;
      }
      // If there are errors in the certificate chain, look at each error to determine the cause.
      if ((sslPolicyErrors & System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors) != 0)
      {
        if (chain != null && chain.ChainStatus != null)
        {
          foreach (System.Security.Cryptography.X509Certificates.X509ChainStatus status in chain.ChainStatus)
          {
            if ((certificate.Subject == certificate.Issuer) &&
               (status.Status == System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.UntrustedRoot))
            {
              // Self-signed certificates with an untrusted root are valid. 
              continue;
            }
            else
            {
              if (status.Status != System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
              {
                // If there are any other errors in the certificate chain, the certificate is invalid,
             // so the method returns false.
                return false;
              }
            }
          }
        }
        // When processing reaches this line, the only errors in the certificate chain are 
    // untrusted root errors for self-signed certificates. These certificates are valid
    // for default Exchange server installations, so return true.
        return true;
      }
      else
      {
     // In all other cases, return false.
        return false;
      }
    }

Use a classe ServicePointManager no namespace .NET System.Net para conectar um método de retorno de chamada de validação com a definição da propriedade ServerCertificateValidationCallback. Você pode usar um código semelhante ao exemplo a seguir para configurar a propriedade ServerCertificateValidationCallback.

ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;

Próximas etapas

Depois de criar o método de retorno de chamada de validação para a API Gerenciada do EWS, você pode usar o serviço Descoberta Automática para obter pontos de conexão e configurações de usuário e domínio de um servidor Exchange. Para saber mais, confira os seguintes artigos:

Conferir também