Как удалить данные SSL-сертификата

У меня есть клиент-серверная установка. Клиент создает прокси для связи с сервером. Когда протоколом связи является HTTPS, прокси-сервер прослушивает событие проверки сертификата SSL через следующую строку:

ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

Метод ValidateRemoteCertificate работает с исключениями сертификата.

В клиенте пользователь может выбрать один из 3 уровней безопасности: низкий, средний и высоко. На низком уровне метод ValidateRemoteCertificate игнорирует любые ошибки и всегда возвращает значение true. На среднем уровне метод ValidateRemoteCertificate запускает событие, которое уведомляет клиента о проблеме. На этом этапе пользователю появляется сообщение, информирующее его о том, что сертификат проблематичен, и позволяет пользователю выбрать, продолжать ли и принимать соединение с сервером или отклонить. На высоком уровне метод ValidateRemoteCertificate отклоняет соединение из-за какой-либо ошибки.

Пока все хорошо.

Сценарий следующий:

  1. Клиент загружается с предопределенным уровнем безопасности Medium, который уже был принят пользователь и соединение устанавливается с сервером без распространения каких-либо проблем с сертификатом.
  2. Пользователь отключает клиента от сервера (с помощью специальной кнопки).
  3. Пользователь пытается повторно подключить клиента. На этом этапе у клиента есть возможность проверить соединение с помощью кнопки тестирования. Тестовый метод возвращает успех, хотя для теста соединения был создан новый прокси-сервер, и все методы ValidateRemoteCertificate были удалены из ServerCertificateValidationCallback (определенного типа прокси). Кроме того, для проблемного сертификата не запускается событие и не вызывается метод ValidateRemoteCertificate.

Я пытаюсь достичь того, что при выполнении теста ServerCertificateValidationCallback будет вести себя так, как если бы это был его первый вызов. после того, как клиент был запущен, и ValidateRemoteCertificate вступит в игру.

Я попытался найти любой метод, который очищает любые делегаты / события в ServicePointManager, но я не смог его найти.

Здесь есть кэш, который можно очистить? Надеюсь, сценарий достаточно ясен.

7
задан ccellar 28 July 2011 в 13:28
поделиться