Valider un certificat de serveur pour l’API gérée par EWS

Découvrez comment créer et référencer une méthode de rappel de validation de certificat afin de pouvoir effectuer des demandes d’API gérées par EWS vers un serveur Exchange.

Par défaut, les versions d’Exchange à partir d’Exchange 2007 SP1 utilisent des certificats X509 auto-signés pour authentifier les appels d’EWS. Lorsque vous utilisez l’API gérée EWS, vous devez créer une méthode de rappel de validation de certificat. Dans le cas contraire, les demandes d’API gérées par EWS échoueront. Si vous utilisez le service de découverte automatique, l’appel à la méthode de découverte automatique de l’API gérée par EWS échoue avec une erreur AutodiscoverLocalException. Si vous utilisez un proxy de service web généré par le web, vous pouvez également créer une méthode de rappel de validation, en fonction de la façon dont le proxy est créé.

Conditions préalables à la création d’une méthode de rappel de validation

Pour configurer la validation d’un certificat de serveur, assurez-vous que les conditions suivantes sont remplies :

  • Votre Exchange utilise un certificat auto-signé pour EWS. Si l’administrateur a installé un certificat valide qui trace un certificat racine, vous n’avez pas besoin de créer une méthode de rappel de validation.

  • Vous créez une application gérée qui inclut une référence aux espaces de noms .NET Framework suivants :

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

Exemple : méthode de rappel pour valider un certificat de serveur pour l’API gérée par EWS

L’exemple de code suivant montre comment créer une méthode de rappel de validation de certificat X509 pour l’API gérée par EWS. Cette méthode validera un certificat X509 et ne retournera la valeur True uniquement si l'un des critères suivants est rempli :

  • Le certificat est valide et remonte à un certificat racine valide.
  • Le certificat est valide et est auto-signé par le serveur qui l'a renvoyé.

Importante

La méthode de rappel de validation de certificat dans cet exemple fournit une sécurité suffisante pour le développement et le test des applications d’API gérées par EWS. Toutefois, il se peut qu'elle ne fournisse pas une sécurité suffisante pour votre application déployée. Vous devez toujours vous assurer que la méthode de rappel de validation de certificat que vous utilisez répond aux exigences de sécurité de votre organisation.

      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;
      }
    }

Vous utilisez la classe ServicePointManager dans l’espace de noms .NET System.Net pour raccorder une méthode de rappel de validation en définition de la propriété ServerCertificateValidationCallback. Vous pouvez utiliser du code similaire à l'exemple de code suivant pour définir la propriété ServerCertificateValidationCallback.

ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;

Prochaines étapes

Après avoir créé la méthode de rappel de validation pour l’API gérée par EWS, vous pouvez utiliser le service de découverte automatique pour obtenir des points de connexion et des paramètres d’utilisateur et de domaine à partir d’un serveur Exchange. Si vous souhaitez en savoir plus, consultez les articles suivants :

Voir aussi