Мне нужно использовать веб-службу, но у нее есть сертификат, и мне нужно отключить его аутентификацию.
серверная сторона может быть фиктивным сервером, который мы используем для "имитации" результатов или реального третьего стороннего сервера, который использует защищенные заголовки мыла
я должен иметь возможность отключить проверку сертификата на сервере при вызове фиктивного сервера, но включить его при вызове реального сервера (который не является нашим)
я заметил, что способ отключить это:
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
который отлично работает.
проблема в том, что после выполнения этой строки кода я не могу "перевернуть" ее
Мне нужно что-то вроде:
if (TestMode)
{
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
}
else
{
//enable certificate validation
}
Кстати, код находится в С#.
есть идеи?
Вам необходимо отменить регистрацию обратного вызова, например:
Объявите ссылку RemoteCertificateValidationCallback.
static RemoteCertificateValidationCallback _callbackTrue;
Затем в вашем коде инициализации назначьте его следующим образом:
_callbackTrue = (sender, cert, chain, sslPolicyErrors) => true;
Затем вы можете зарегистрировать/удалить регистрацию обратного вызова при изменении свойства TestMode:
// in the setter for TestMode, when set to true.
ServicePointManager.ServerCertificateValidationCallback += _callbackTrue;
// in the setter for TestMode, when set to false
ServicePointManager.ServerCertificateValidationCallback -= _callbackTrue;
Просто убедитесь, что вы регистрируете только обратный вызов, когда TestMode переходит от "false to true" и что вы только отменяете обратный вызов, когда он переходит от "true to false". Т.е. ваши регистрации/перерегистрации должны быть симметричными.