当前位置: 首页 > 知识库问答 >
问题:

Azure:在应用程序服务中使用从密钥库获得的证书时出错

袁泰
2023-03-14

在运行net472 web应用程序的Azure应用程序服务中,我从密钥库访问证书,如下所示:

var certSecret = await kvClient.GetSecretAsync(kvName, secretName);
var cert = new X509Certificate2(Convert.FromBase64String(certSecret.Value));

这一行抛出一个错误

System.Security.Cryptography.CryptographicException: The system cannot find the file specified.

   at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
   at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
   at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData)
   at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData)

共有1个答案

云焱
2023-03-14

尝试获取以下秘密:

var certSecret = await kvClient.GetSecretAsync(vaultBaseUrl, secretName);

您可以检索CertSecret.value来检查它是否有值,然后将其发送到X509Certificate2,后者指定X509KeyStorageFlags存储标志。

X509Certificate2 x509 = new X509Certificate2(Convert.FromBase64String(certSecret.value), string.Empty, X509KeyStorageFlags.MachineKeySet)
 类似资料:
  • 我已经购买了一个Azure应用程序服务证书,以获得“A”的记录。之后,我试图将证书导入到密钥库中,但我得到的错误代码为500,如所附屏幕所示。 步骤1-在Azure中将证书导入到密钥库以进行安全管理。

  • 我有一个webjob从azure key vault service获得证书,并且在本地从KV访问/检索该证书没有问题。但是,当部署这个webjob时,我会得到以下错误: 我已经用AAD注册了应用程序(这个webjob托管的地方),它对kv空间有只读访问权限。我找到了几个相关的(我想..?)关于这方面的帖子:

  • 我已经创建了一个Azure应用程序服务证书通配符,并将其链接到Azure密钥库,同时还进行了域验证。现在我想把这个证书导出为PFX并在其他组件中使用。 我试过运行powershell脚本导出/下载证书,但不起作用。 从密钥库导出证书的powershell脚本取自https://Azure.github.io/appservice/2017/02/24/creating-a-local-pfx-co

  • 我想在应用程序配置服务中检索Azure密钥库引用的秘密。在dotnet中,这是小菜一碟,只需添加Options.configureKeyVault,就可以像下面这样检索secret: 但是在Python中,我没有找到任何方法可以在AzureAppConfigurationClient中添加KeyVault处理,当您试图检索KeyVault引用的secret时,您只需要得到字符串: 。 我已经“解决

  • 但是,这将错误地表示它无法加载证书。

  • 我试图使用系统分配的应用程序服务标识从应用程序服务(Web API)向Azure密钥库进行身份验证。在Azure Key Vault中,我创建了一个an access策略,该策略允许应用程序服务访问密钥、机密和证书(稍后将对此进行限制!)。 请注意,使用服务主体对同一个密钥库进行身份验证没有问题,但是使用托管标识的想法当然是为了避免在任何地方存储客户机ID和secret之类的凭据 异常消息: