我们在 Azure 上的两个 Web 应用程序上部署了一个网站:一个生产版本和一个预生产版本。
该网站在特定时间使用以下代码创建一个容器来托管 RSA 密钥:
// -----------------------------
// Part 1 : Initialize csp params
// -----------------------------
const int PROVIDER_RSA_FULL = 1;
const string CONTAINER_NAME = "OurKeyContainer";
CspParameters cspParams;
cspParams = new CspParameters(PROVIDER_RSA_FULL);
cspParams.KeyContainerName = CONTAINER_NAME;
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
// --------------------------------------------------
// Part 2 : A try to set folder access rights to "everyone"
// --------------------------------------------------
// http://whowish-programming.blogspot.fr/2010/10/systemsecuritycryptographycryptographic.html
// http://stackoverflow.com/questions/5013881/c-sharp-how-do-i-get-the-everybody-user
var sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
var rule = new CryptoKeyAccessRule(sid, CryptoKeyRights.FullControl, AccessControlType.Allow);
cspParams.CryptoKeySecurity = new CryptoKeySecurity();
cspParams.CryptoKeySecurity.SetAccessRule(rule);
return new RSACryptoServiceProvider(cspParams);
问题是此代码仅适用于其中一个网站,即实际首次启动的网站。第二个抛出 CryptographicException “对象已存在”。
谷歌搜索后,该问题似乎是由执行网站的用户无权访问密钥容器引起的,但不幸的是,推荐的修复(在我们上面的代码的第 2 部分中实现)不起作用..
有什么想法或建议吗?
谢谢
里亚纳