C# 为什么RSACryptServiceProvider.VerifyHash需要LDAP检查?

C# 为什么RSACryptServiceProvider.VerifyHash需要LDAP检查?,c#,.net,asp.net,encryption,rsacryptoserviceprovider,C#,.net,Asp.net,Encryption,Rsacryptoserviceprovider,我最近遇到了一个奇怪的问题 我有一个web应用程序使用它进行解密。当用户通过我们的VPN运行web服务时,速度变得非常慢。当他们没有连接或互联网连接时,他们很好 经过大量挖掘,我发现每次调用rsacyptoserviceprovider.VerifyHash,它都会发出LDAP请求,以检查MyMachineName\ASPNET 我们的WebDev(基于cassini的)服务器不会发生这种情况,因为它们是以当前用户的身份运行的,而且在VPN上的速度非常慢,但根本不应该发生这种情况 出于以下几个原

我最近遇到了一个奇怪的问题

我有一个web应用程序使用它进行解密。当用户通过我们的VPN运行web服务时,速度变得非常慢。当他们没有连接或互联网连接时,他们很好

经过大量挖掘,我发现每次调用
rsacyptoserviceprovider.VerifyHash
,它都会发出LDAP请求,以检查
MyMachineName\ASPNET

我们的WebDev(基于cassini的)服务器不会发生这种情况,因为它们是以当前用户的身份运行的,而且在VPN上的速度非常慢,但根本不应该发生这种情况

出于以下几个原因,这似乎是错误的:

  • 为什么要检查本地计算机用户的域控制器
  • 它为什么在乎?不管怎样,加密/解密都可以工作

有人知道为什么会发生这种情况,或者如何最好地解决它吗?

从这个知识库来看,代码中似乎有一个需要排序的“皱纹”:

谢谢(+1&ans)

测试和工作

从知识库文章:

SignData或VerifyData方法 始终执行OID查找查询 它被发送到域 控制器,即使应用程序 正在本地用户帐户中运行。 这可能会导致签名时速度缓慢 或验证数据。登录失败 DC上发生审核事件,因为 客户端计算机的本地用户 帐户未被用户识别 域名。因此,OID查找 失败了

这正是我们所看到的

我们改变了这一行:

rsa.VerifyHash( hashedData, CryptoConfig.MapNameToOID( "SHA1" ), signature );
为此:

rsa.VerifyHash( hashedData, null, signature );

这就解决了问题。

耶!我记得Tess(调试)或Mark(系统内部)博客上与类似问题相关的知识库,现在找不到典型的链接。