【问题标题】:CngKey System.Security.Cryptography.CryptographicException The system cannot find the file specified on AzureCngKey System.Security.Cryptography.CryptographicException 系统找不到 Azure 上指定的文件
【发布时间】:2021-02-25 11:14:28
【问题描述】:

我尝试从此代码生成密钥

CngKey key = CngKey.Import(Convert.FromBase64String(privateKey), CngKeyBlobFormat.Pkcs8PrivateBlob);

它在本地运行良好,但是当我在我的 Azure 应用服务中部署时。 它给了我这个错误:

System.Security.Cryptography.CryptographicException:系统找不到指定的文件。 在 System.Security.Cryptography.NCryptNative.ImportKey(SafeNCryptProviderHandle 提供程序,字节 [] keyBlob,字符串格式) 在 System.Security.Cryptography.CngKey.Import(Byte[] keyBlob, String curveName, CngKeyBlobFormat 格式, CngProvider provider)

我在配置中添加了 WEBSITE_LOAD_USER_PROFILE,值为“1”,但没有任何区别。

谢谢

【问题讨论】:

  • 您是否发布了应用程序?只有在构建和部署机器上都安装了相同版本的 net(包括更新)时,c# 代码才能在另一台机器上运行。如果您没有相同的版本,则必须发布。
  • 是的,我的申请已发布
  • 是否有可执行文件在 bin 文件夹中的任何 dll 文件。可能需要在exe文件所在的deploy机器上添加dll。
  • 它是一个 Web 应用程序,我有一台构建机器将包部署在 azure 应用服务上
  • 您的构建包可能缺少需要的 dll。

标签: c# azure security cryptography private-key


【解决方案1】:

如果WEBSITE_LOAD_USER_PROFILE = 1 不适合您。以下是针对同一问题的解决方法:

  • 在 portal.azure.com 中打开您的 Azure 应用服务(Azure 网站)刀片
  • 转到应用程序设置页面
  • 滚动到应用设置
  • 添加一个新的条目键:WEBSITE_LOAD_CERTIFICATES,并为其提供一个虚拟(伪造的、虚构的、随机生成的)值。

查看以下链接以获取类似问题以供参考:

【讨论】:

  • 问题是当我将应用服务定价计划升级到基本版时它是免费的,它运行良好。免费计划,您拥有共享虚拟机,但从基本计划开始,您拥有自己的虚拟机
【解决方案2】:

我通过在 Azure 配置中添加 WEBSITE_LOAD_USER_PROFILE = 1 将计划服务从免费升级到基本服务。

问题在于,当应用服务免费时,它使用共享虚拟机,但在将我的应用服务定价升级为基本服务时,它使用私有虚拟机。

【讨论】:

    【解决方案3】:

    这个问题不仅在 Azure 上,我的 VPS 上也有同样的问题,这个答案挽救了我的生命:

    X509Certificate Constructor Exception

    干杯, 尼克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      相关资源
      最近更新 更多