HttpWebRequest を使用して SSL\TLS 接続を確立すると、呼び出し時に 30 秒近くかかることがわかりました
request.GetRequestStream()
stacktrace を有効にしてトレースを有効にすると、2s が poxy を検出することがわかったので、app.config で無効にしました。
<system.net>
<defaultProxy enabled="false" useDefaultCredentials="false">
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
</system.net>
28秒近くかかる次のポイントは
at System.Net.Security.SecureChannel.AcquireClientCredentials(Byte[]& thumbPrint)
メソッド本体を調べたところ、X509Chain.Build() の呼び出しが見つかり、証明書チェーンの構築に 25 秒近くかかりました。
興味深いことに、新しい HttpWebReqest を作成して再試行すると (アプリを再起動せずに)、リクエストの実行に数ミリ秒かかりました。
誰かが何をすべきか提案できますか? リクエストのキャッシュはオプションではありません。アプリの実行から高速である必要があります。
更新:
X509Chain.BuildChain() で 30 秒かかる呼び出しを見つけました。
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 です。
アップデート:
CRL および OCSP チェックを無効にしようとしましたが、効果はありません:
App.config に追加
<runtime> <generatePublisherEvidence enabled="false"/> </runtime>
マシン全体: [コントロール パネル] -> [インターネット オプション] -> [詳細設定] -> [セキュリティ] で、[発行元の証明書の失効を確認する] オプションのチェックを外します
レジストリ内:
[HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing] "状態"=dword:00023e00