я обнаружил, что, когда я использую HttpWebRequest для установления соединения SSL \ TLS, требуется возле 30s при вызовеСоздание SSL TLS соединение (X509Chain.Build()) занимает слишком много времени
request.GetRequestStream()
, когда я включен трассировку с StackTrace включена, я обнаружил, что 2s идет найти никудышный, поэтому я отключил его в app.config:
<system.net>
<defaultProxy enabled="false" useDefaultCredentials="false">
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
</system.net>
Следующая точка, которая принимает рядом 28s был в
at System.Net.Security.SecureChannel.AcquireClientCredentials(Byte[]& thumbPrint)
После осмотра тела метода я нашел вызов X509Chain.Build(), и для создания цепочки сертификатов потребовалось около 25 секунд.
Интересно, что при создании нового HttpWebReqest и повторных попыток (без перезагрузки приложения) для выполнения запроса потребовалось несколько мс.
Может ли кто-нибудь предложить, что делать? Запрос кэширования не является вариантом, он должен быть быстрым от запуска приложения.
Обновление:
Я нашел вызов, который принимает 30s в X509Chain.BuildChain(), это:
if (!CAPISafe.CertGetCertificateChain(hChainEngine, pCertContext, ref pTime, invalidHandle, ref cert_chain_para, dwFlags, IntPtr.Zero, ref ppChainContext))
Метод объявлен в CAPISafe как:
[DllImport("crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool CertGetCertificateChain([In] IntPtr hChainEngine, [In] SafeCertContextHandle pCertContext, [In] ref System.Runtime.InteropServices.ComTypes.FILETIME pTime, [In] SafeCertStoreHandle hAdditionalStore, [In] ref CAPIBase.CERT_CHAIN_PARA pChainPara, [In] uint dwFlags, [In] IntPtr pvReserved, [In, Out] ref SafeCertChainHandle ppChainContext);
Итак, это функция Crypto API CertGetCertificateChain Все еще не знаю, что делать дальше ...
Update:
Я попытался не отключить CRL и OCSP проверки, до сих пор никакого эффекта:
Добавить в App.config
<runtime> <generatePublisherEvidence enabled="false"/> </runtime>
машина шириной: Панель управления -> Свойства обозревателя -> Дополнительно -> В разделе безопасности, снимите флажок Проверить вариант отзыва сертификата издателя
В реестре:
[HKEY_USERS \ S-1-5-20 \ Software \ Microsoft \ Windows \ CurrentVersion \ Провайдеры WinTrust \ Trust \ Software Publishing] "государство" = DWORD: 00023e00
FWIW, # 1 отключает создание доказательств для приложения, основанное на сигнатуре Authenticode приложения, если оно есть. # 2 отключает проверку отзыва подлинности аутентификации для подписи Authenticode (используется только в редких случаях). Ни один из них не применяется к проверкам отзыва сертификатов клиента SSL. – EricLaw