Я работаю над проектом, который использует некоторую HTTP-связь между двумя серверными серверами. Серверы используют сертификаты X509 для аутентификации. Излишне говорить, что когда сервер A (клиент) устанавливает соединение с сервером B (сервер), существует ошибка проверки SSL/TLS, поскольку используемые сертификаты не принадлежат доверенным сторонним организациям.
Обычно способ обращения с ним - это ServicePointManager.ServerCertificateValidationCallback
, например:
ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, error) =>
{
return cert.GetCertHashString() == "xxxxxxxxxxxxxxxx";
};
Этот подход работает, за исключением того, что он не идеален. По сути, это процедура переопределения проверки для КАЖДОГО HTTP-запроса, выполняемого приложением. Таким образом, если другой класс попытается запустить HTTP-запрос, он не удастся. Кроме того, если другой класс переопределяет ServicePointManager.ServerCertificateValidationCallback
для своих целей, то мое сообщение начинает выходить из строя внезапно.
Единственное решение, которое приходит на ум, создает отдельный AppDomain для выполнения клиентских HTTP-запросов. Это будет работать, но на самом деле - глупо делать это только для того, чтобы можно было выполнять HTTP-запросы. Накладные расходы будут ошеломляющими.
С учетом этого, кто-нибудь исследовал, есть ли в .NET более эффективная практика, которая позволила бы получать доступ к веб-службам при обработке проверки SSL/TLS клиента, не затрагивая других веб-клиентов?