web-dev-qa-db-ja.com

Windows上のアプリケーションの証明書失効チェックを無効にする

.NET 3.5デスクトップアプリケーションがあり、それが使用されていたテストマシンが不在のときはいつでも、機能が定期的に遅くなりました。
インターネットに接続されていないオフィスのマシンでエラーを再現することができましたが、ANTSパフォーマンスプロファイラーを使用したときにのみ、何が起こっているのかをより明確に把握できました。

ANTSで、NHibernateがSystem.Data.SqlServerCE.dllアセンブリを読み込もうとしたときにアプリケーションで確認できた遅延に対応する、最大16秒かかる「同期の待機」が表示されました。
アクションをすぐに再試行した場合、遅延は発生しませんが、5分間放置すると、次に試行したときに再度ロードするのに時間がかかります。

これまでの私の調査によると、SqlServerCE dllが署名されているため、システムが接続を試みて証明書失効リストを取得し、タイムアウトしているようです。
インターネットオプションのLAN設定で[設定を自動的に検出する]設定を無効にすると、[発行者の証明書失効を確認する]を無効にするのと同様に、問題が解決します。
しかし、このアプリケーションが展開される管理者は、マシンごとまたはユーザーごとに証明書チェックを無効にするという考えに満足できないため、CRLチェックのアプリケーションレベルの無効化を機能させる必要があります。 。

.net 2.0には、この動作を説明し、構成ファイル要素で可能な修正を提供する、十分に文書化されたバグがあります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>

これは[〜#〜] not [〜#〜]動作していますが、.net3.5を使用しています。
SQLServerCE dllはNHibernateによって動的にロードされており、動的であるという事実が何らかの理由で設定が機能しない理由である可能性があるのではないかと思いますが、それを確認する方法がわかりません。

構成設定が機能しない理由について誰かが提案できますか?
または、アプリケーションレベルでチェックを無効にする別の方法はありますか?おそらく、インストール時にアプリケーションの例外を設定するために使用できるCASポリシー設定ですか?
または、アプリケーションで信頼レベルを上げるために変更できるものなどはありますか?

20
Colm Clarke

アプリケーションごとに失効リストを確認するかどうかをコードで指定できます。

ServicePointManager.CheckCertificateRevocationList = false;
7

このブログでは 投稿 (別のソースを引用しています)2つのオプションがあります:システム全体またはアプリごとにCRLチェックを無効にする:

CRLチェックマシン全体のコントロールパネルを無効にする->インターネットオプション->詳細設定->セキュリティの下で、発行者の証明書失効オプションのチェックをオフにします

特定の.NetアプリケーションのCRLチェックを無効にする次のMicrosoftKB記事を参照してください: http://support.Microsoft.com/kb/936707

4
John Gasper