我的应用程序在创建X509Certificate2时遇到"System.Security.Cryptography.CryptographicException:密钥集不存在的异常。
从Azure密钥库读取证书的函数:
private string GetEncryptSecret(string certConfigName)
{
var kv = new KeyVaultClient(GetToken);
var sec = kv.GetSecretAsync(WebConfigurationManager.AppSettings[certConfigName]).Result;
return sec.Value;
}如何创建新的X509Certificate2对象:
public X509Certificate2 GetCertificate(CertificatesEnum certificate)
{
switch (certificate)
{
case CertificatesEnum.Accounts:
return new X509Certificate2(
Convert.FromBase64String(GetEncryptSecret(Constants.Magda.Certificates.Accounts)),
string.Empty, X509KeyStorageFlags.MachineKeySet);
}
}在注意到这只适用于前3-9个请求之后,我启动了一个Azure远程调试会话,并看到新的certificate.Privatekey导致了"System.Security.Cryptography.CryptographicException:密钥集不存在“异常”。
通过执行等待循环临时修复了此问题,因为在几次重试之后,将无异常地创建新证书。
public X509Certificate2 GetCertificate(CertificatesEnum certificate)
{
switch (certificate)
{
case CertificatesEnum.Accounts:
var accountCertRawData = Convert.FromBase64String(GetEncryptSecret(Constants.Magda.Certificates.Accounts));
X509Certificate2 accountCert = null;
for (int i = 0; i < 20; i++)
{
try
{
accountCert= new X509Certificate2(accountCertRawData , string.Empty,
X509KeyStorageFlags.MachineKeySet);
//set variable to test exception
var accountCert = accountCert.PrivateKey;
break;
}
catch (System.Security.Cryptography.CryptographicException)
{
Thread.Sleep(1000 * i);
}
}
return accountCert;
}
}有没有人对此有合适的解决方案,可以解释Azure Web应用程序的后台发生了什么?
发布于 2018-04-10 02:39:57
尝试从web应用程序中删除WEBSITE_LOAD_USER_PROFILE应用程序设置(如果可用)。
发布于 2020-01-25 17:21:34
在Azure WebApp中,当调用GetPrivateKey()时,在X509Certificate2的构造函数中不使用MachineKeySet作为存储标志参数时,Keyset does not exist抛出“某些时候”抛出的问题
new X509Certificate2(certContent, "", X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable)https://stackoverflow.com/questions/49693982
复制相似问题