#c# #.net-3.5 #ssl
#c# #.net-3.5 #ssl
Вопрос:
Сервер, к которому я подключаюсь, недавно изменил свой SSL-сертификат. С момента изменения проверка подлинности SSL занимает более десяти секунд, чтобы завершить загрузку списка отзыва сертификата.
Я использую RemoteCertificateChainCallback для проверки сертификата, однако задержка возникает ДО вызова обратного вызова, поэтому задержку вызывает не создание цепочки сертификатов или каких-либо других действий
Проблема возникает только тогда, когда CRL НЕ КЭШИРУЕТСЯ, т.Е. Мне нужно удалить кеш CRL (Documents amp; settings / [user]AppData / Microsoft / CertificateUrlCache или что-то подобное), чтобы повторить его более одного раза в день.
Если я отключу проверку CRL в вызове authenticateaclient(), аутентификация будет быстрой.
Используя сетевой анализатор, я вижу, что когда CRL в конечном итоге запрашивается, он загружается почти мгновенно, поэтому задержка не связана с задержкой в сети (по крайней мере, не для CRL-сервера).
Одна странная вещь, которую я вижу с помощью сетевого анализатора, заключается в том, что после первоначального извлечения SSL-сертификата с сервера возникает пятисекундная задержка до загрузки CRL.**
Есть ли у кого-нибудь какие-либо предложения относительно того, что может происходить на этом этапе, и чем может быть вызвана задержка?
Спасибо!
ОБНОВЛЕНИЕ: ХОРОШО, я использовал отражатель и профилировщик памяти, чтобы углубиться. Authenticateaclient. Похоже, что большая часть времени тратится на построение цепочки сертификатов, т.е.:
if (!CAPISafe.CertGetCertificateChain(hChainEngine, pCertContext, ref pTime, invalidHandle, ref cert_chain_para, dwFlags, IntPtr.Zero, ref ppChainContext))
Если я не запрашиваю проверку CRL, то это возвращается почти мгновенно, с включенной проверкой CRL, около 4 секунд.
Я подозреваю, что увижу такую же задержку, если я вручную попытаюсь построить цепочку в моем RemoteCertificateValidationCallback.
На самом деле это не было бы проблемой, если бы CRL был кэширован, однако похоже, что это кэширование не работает на клиенте Windows7. Почему?? Ну, я думаю, это следующая задача…
Кто-нибудь может объяснить, что может быть причиной того, что построение цепочки занимает так много времени?
Ответ №1:
Кажется, что вот ответ на этот вопрос:
Копнув немного дальше, чтобы понять, почему CertGetCertificateChain занял так много времени, я увидел, что мы пытались загрузить следующий файл из Интернета:
http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab
Зачем мы загружали этот файл? Ну, это произойдет по умолчанию в Windows, когда мы создадим цепочку сертификатов, сертификат корневого центра сертификации которых не установлен в системе. Это называется функцией автоматического обновления корневых сертификатов, и она доступна в Windows XP / Server 2003 и более поздних версиях ОС, включая Windows 7 / Server 2008 R2.