【问题标题】:File not found on RSACryptoServiceProvider, service account permissions?在 RSACryptoServiceProvider 上找不到文件,服务帐户权限?
【发布时间】:2010-10-06 00:49:19
【问题描述】:

我们的网络服务包装了一个第三方库,其中包含以下代码。

我们在 IIS 6 应用程序池中使用 Active Directory 服务帐户(没有交互式登录功能)。我们的服务因错误“系统找不到指定的文件”而失败。我们已将错误追溯到RSACryptoServiceProvider provider = new RSACryptoServiceProvider();。第三方程序集的加密过程依赖于基于 x509 文件的证书,并且服务帐户具有对密钥文件夹的读/写访问权限。此外,该服务帐户具有读取、写入、修改权限:

“C:\Documents and Settings\所有用户\应用程序 Data\Microsoft\Crypto\RSA\MachineKeys”。

代码:

StringBuilder builder = new StringBuilder(publicKeyData);
builder.Replace("-----BEGIN CERTIFICATE-----", "");
builder.Replace("-----END CERTIFICATE-----", "");
X509Certificate2 certificate = new X509Certificate2( Convert.FromBase64String(builder.ToString()));

string xmlString = certificate.PublicKey.Key.ToXmlString(false);

RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); //BOOM
CspKeyContainerInfo containerInfo = provider.CspKeyContainerInfo;

provider.PersistKeyInCsp = false;
provider.FromXmlString(xmlString);
loadedKeys.Add(key, provider);
provider2 = provider;

我们破解了打开的 FileMon,发现该 AppPool 有一个 FILE NOT FOUND,然后是 同一个文件的另一个 SUCCESS。

我在这里没有我的元素,有人知道我们为什么会看到这个吗?

【问题讨论】:

    标签: .net cryptography certificate


    【解决方案1】:

    我不知道导致错误的原因,但您可以这样做:

    StringBuilder builder = new StringBuilder(publicKeyData);
    builder.Replace("-----BEGIN CERTIFICATE-----", "");
    builder.Replace("-----END CERTIFICATE-----", "");
    X509Certificate2 certificate = new X509Certificate2( Convert.FromBase64String(builder.ToString()));
    
    RSACryptoServiceProvider provider = 
      (RSACryptoServiceProvider) certificate.PublicKey.Key;
    
    loadedKeys.Add(key, provider);
    provider2 = provider;
    

    如果你幸运的话,可以解决这个错误。

    【讨论】:

      【解决方案2】:

      您看到此问题的原因是 RSACryptoService 提供程序在机器密钥存储上打开了一个排他锁。 读证书没关系,使用对象会导致锁

      两种方法:

      1. 使用非 Microsoft RSA 堆栈。
      2. 在访问对象时使用 lock()。

      我遇到了同样的事情,最终编写了我自己的 RSA 函数集。

      您还可以在 ASP.NET 池中设置用户配置文件关联;这样,将使用用户配置文件密钥库

      【讨论】:

        猜你喜欢
        • 2020-08-03
        • 2019-05-23
        • 2012-07-04
        • 2019-09-07
        • 2021-10-21
        • 2020-07-15
        • 1970-01-01
        • 2020-11-30
        • 2019-03-15
        相关资源
        最近更新 更多