Validar un certificado de servidor para la API administrada de EWS

Obtenga información sobre cómo crear y hacer referencia a un método de devolución de llamada de validación de certificados para que pueda realizar solicitudes de API administradas de EWS a un servidor Exchange.

De forma predeterminada, las versiones de Exchange a partir de Exchange 2007 SP1 usan certificados X509 autofirmados para autenticar llamadas de EWS. Cuando se usa la API administrada de EWS, debe crear un método de devolución de llamada de validación de certificados; de lo contrario, se producirá un error en las solicitudes de la API administrada de EWS. Si usa el servicio Detección automática, la llamada al método de detección automática de la API administrada de EWS producirá un error AutodiscoverLocalException. Si usa un proxy de servicio web generado por web, es posible que también tenga que crear un método de devolución de llamada de validación, en función de cómo se cree el proxy.

Requisitos previos para crear un método de devolución de llamada de validación

Para configurar para validar un certificado de servidor, asegúrese de que se cumple lo siguiente:

  • El servidor de Exchange usa un certificado autofirmado para EWS. Si el administrador ha instalado un certificado válido que realiza un seguimiento de un certificado raíz, no es necesario crear un método de devolución de llamada de validación.

  • Va a crear una aplicación administrada que incluye una referencia a los siguientes espacios de nombres .NET Framework necesarios:

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

Ejemplo: método de devolución de llamada para validar un certificado de servidor para la API administrada de EWS

En el ejemplo de código siguiente se muestra cómo crear un método de devolución de llamada de validación de certificados X509 para la API administrada de EWS. Este método validará un certificado X509 y solo devolverá true cuando se cumpla cualquiera de los siguientes criterios:

  • El certificado es válido y realiza un seguimiento de un certificado raíz válido.
  • El certificado es válido y está autofirmado por el servidor que lo devolvió.

Importante

El método de devolución de llamada de validación de certificados de este ejemplo proporciona seguridad suficiente para el desarrollo y las pruebas de aplicaciones de API administradas de EWS. Sin embargo, es posible que no proporcione suficiente seguridad para la aplicación implementada. Siempre debe asegurarse de que el método de devolución de llamada de validación de certificados que usa cumple los requisitos de seguridad de su organización.

      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 la claseServicePointManager en el Espacio de nombres .NET System.Net para enlazar un método de devolución de llamada de validación estableciendo la propiedad ServerCertificateValidationCallback. Puede usar código similar al ejemplo de código siguiente para establecer la propiedadServerCertificateValidationCallback.

ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;

Pasos siguientes

Después de crear el método de devolución de llamada de validación para la API administrada de EWS, puede usar el servicio Detección automática para obtener puntos de conexión y la configuración de usuario y dominio de un servidor Exchange. Para más información, consulte los siguientes artículos:

Vea también