首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure Web应用程序: System.Security.Cryptography.CryptographicException:密钥集不存在

Azure Web应用程序: System.Security.Cryptography.CryptographicException:密钥集不存在
EN

Stack Overflow用户
提问于 2018-04-06 21:30:36
回答 2查看 1.4K关注 0票数 4

我的应用程序在创建X509Certificate2时遇到"System.Security.Cryptography.CryptographicException:密钥集不存在的异常。

从Azure密钥库读取证书的函数:

代码语言:javascript
复制
 private string GetEncryptSecret(string certConfigName)
    {
        var kv = new KeyVaultClient(GetToken);
        var sec = kv.GetSecretAsync(WebConfigurationManager.AppSettings[certConfigName]).Result;
        return sec.Value;
    }

如何创建新的X509Certificate2对象:

代码语言:javascript
复制
 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:密钥集不存在“异常”。

通过执行等待循环临时修复了此问题,因为在几次重试之后,将无异常地创建新证书。

代码语言:javascript
复制
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应用程序的后台发生了什么?

EN

回答 2

Stack Overflow用户

发布于 2018-04-10 02:39:57

尝试从web应用程序中删除WEBSITE_LOAD_USER_PROFILE应用程序设置(如果可用)。

票数 0
EN

Stack Overflow用户

发布于 2020-01-25 17:21:34

在Azure WebApp中,当调用GetPrivateKey()时,在X509Certificate2的构造函数中不使用MachineKeySet作为存储标志参数时,Keyset does not exist抛出“某些时候”抛出的问题

代码语言:javascript
复制
new X509Certificate2(certContent, "", X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49693982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档