我們的Web服務將包含包含以下代碼的第三方庫。在RSACryptoServiceProvider上找不到文件,服務帳戶權限?
我們在IIS 6應用程序池中使用Active Directory服務帳戶(無交互式登錄功能)。我們的服務因錯誤「系統找不到指定的文件」而失敗。我們已將錯誤追溯到「RSACryptoServiceProvider provider = new RSACryptoServiceProvider();」。第三方程序集依賴於基於x509文件的證書進行加密,服務帳戶具有對密鑰文件夾的讀/寫訪問權限。此外,該服務帳戶還具有對「C:\ Documents and Settings \ All Users \ Application 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和注意到,有沒有找到該應用程序池的文件時,緊接着又成功的完全相同的文件。
我不在這裏了,有人有一個想法,爲什麼我們看到這個?