在Windows上禁用应用程序的证书吊销检查

Col*_*rke 20 c# nhibernate certificate code-access-security certificate-revocation

我有一个.NET 3.5桌面应用程序,当它所在的测试机器不在办公室时,它已经显示出功能的周期性减速.
我设法在没有互联网连接的情况下在办公室的机器上复制错误,但只有当我使用ANTS性能分析器时,我才能更清楚地了解正在发生的事情.

在ANTS中,我看到"等待同步"需要16秒,这与NHibernate尝试加载System.Data.SqlServerCE.dll程序集时在应用程序中看到的延迟相对应.
如果我立即再次尝试动作它会毫无延迟地工作但如果我离开它5分钟,那么下次我尝试它时再次加载会很慢.

到目前为止,我的研究似乎是因为SqlServerCE dll已签名,因此系统正在尝试连接以获取证书吊销列表并超时.
禁用"Internet选项"LAN设置中的"自动检测设置"设置会使问题消失,同时禁用"检查发布者证书吊销".
但是,部署此应用程序的管理员不会对在每台计算机或每个用户上禁用证书检查的想法感到满意,因此我确实需要让应用程序级别禁用CRL检查工作.

.net 2.0中有一个记录良好的错误,它描述了这种行为,并提供了一个配置文件元素的可能修复.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

不是为我工作然而,即使我使用.NET 3.5.
SQLServerCE dll是由NHibernate动态加载的,我想知道它是动态的这个事实可能不知何故设置不起作用的原因,但我不知道如何检查它.

任何人都可以提供有关配置设置可能不起作用的建议吗?
或者是否有另一种方法可以在应用程序级别禁用检查,也许是CAS策略设置,我可以使用它在应用程序安装时为应用程序设置例外?
或者我可以在应用程序中更改信任级别或类似的东西吗?

Ano*_*per 7

如果要检查每个应用程序的吊销列表,可以在代码中指定:

ServicePointManager.CheckCertificateRevocationList = false;
Run Code Online (Sandbox Code Playgroud)


Joh*_*per 4

在此博客文章(引用了另一个来源)中,您有两个选择:禁用系统范围或每个应用程序的 CRL 检查:

禁用 CRL 检查计算机范围控制面板 -> Internet 选项 -> 高级 -> 在安全性下,取消选中检查发布者的证书吊销选项

禁用特定 .Net 应用程序的 CRL 检查请参阅此 Microsoft 知识库文章:http://support.microsoft.com/kb/936707

  • 我也有同样的问题。设置 `checkCertificateReservationList="false"` 无效,而取消选中 Internet 选项中的选项确实有效。我很想找到一个程序化的解决方案来解决这个问题! (2认同)