Проверка сертификата сервера для управляемого 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. Дополнительные сведения см. в следующих статьях:
Получение параметров пользователя из Exchange с помощью службы автообнаружения
Получение параметров пользователя из Exchange с помощью службы автообнаружения