【发布时间】: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