Поделиться через


Проверка сертификата сервера для управляемого API-интерфейса EWS

Узнайте, как создать метод обратного вызова проверки сертификата и сослаться на него, чтобы выполнять запросы управляемого API EWS к серверу Exchange Server.

По умолчанию версии Exchange начиная с Exchange 2007 Exchange SP1 используют самозаверяющие сертификаты X509 для проверки подлинности вызовов из EWS. При использовании управляемого API EWS необходимо создать метод обратного вызова проверки сертификата. В противном случае запросы управляемого API EWS завершатся сбоем. Если вы используете службу автообнаружения, вызов метода автообнаружения управляемого API EWS завершится ошибкой AutodiscoverLocalException. Если вы используете создаваемый в Интернете прокси-сервер веб-службы, вам также может потребоваться создать метод обратного вызова проверки в зависимости от способа создания прокси-сервера.

Необходимые условия для создания метода обратного вызова проверки

Чтобы настроить проверку сертификата сервера, убедитесь, что верно следующее:

  • Ваш сервер Exchange Server использует самозаверяющий сертификат для EWS. Если администратор установил действительный сертификат, отслеживаемый до корневого сертификата, нет необходимости создавать метод обратного вызова проверки.

  • Вы создаете управляемое приложение, которое включает ссылку на следующие обязательные пространства имен .NET Framework.

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

Пример: метод обратного вызова с целью проверки сертификата сервера для управляемого API-интерфейса EWS

В следующем примере кода показано, как создать метод обратного вызова проверки сертификата X509 для управляемого API EWS. Этот метод проверяет сертификат X509 и возвращает значение true только при выполнении обоих следующих условий.

  • Сертификат действителен и отслеживается до действительного корневого сертификата.
  • Сертификат действителен и самозаверяется сервером, который его вернул.

Важно!

Метод обратного вызова проверки сертификата в этом примере обеспечивает достаточную безопасность для разработки и тестирования приложений управляемого API EWS. Однако он может не обеспечивать достаточную безопасность для развернутых приложений. Всегда удостоверяйтесь в том, что используемый метод обратного вызова проверки сертификата соответствует требованиям к безопасности в вашей организации.

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

Используйте класс ServicePointManager в пространстве имен .NET System.Net, чтобы подключить метод обратного вызова проверки путем определения свойства ServerCertificateValidationCallback. Для определения свойства ServerCertificateValidationCallback можно использовать код, аналогичный следующему примеру кода.

ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;

Дальнейшие действия

После создания метода обратного вызова проверки для управляемого API EWS вы можете использовать службу автообнаружения для получения точек подключения, а также параметров пользователя и домена от сервера Exchange Server. Дополнительные сведения см. в следующих статьях:

См. также