Azure,App-Service,从字符串创建X509Certificate2对象



在Azure中拥有一个应用程序服务,并在Azureservicemanagementapi上工作,我正在下载包含每种订阅的Managememnt证书的文件。

使用我试图创建 x509certificate2 对象的文件中使用证书字符串的任何如何。

string cerStr = subscription.Attribute("ManagementCertificate").Value;
X509Certificate2 x509 = new X509Certificate2(Convert.FromBase64String(cerStr), string.Empty, X509KeyStorageFlags.MachineKeySet)

x509certificate2的构造函数抛出异常

访问被拒绝。

system.security.cryptography.cryptographicexception.throwcryptographicexception(int32 hr)at system.security.cryptography.x509certificates.x509utils._loadcertfromblob(byte [] rawdata,intptr密码,uint32 dwflags,boolean persistkeyset, safecertcontexthandle&pcertctx)at system.security.cryptography.x509certificates.x509certificate.loadcertificatefromblob(byte [] RAWDATA,对象密码,X509Keystorageflags keystorageflags)

由于没有人回答这个问题,所以我会尝试并继续前进。如果我错了,请纠正我,但我认为问题是以下代码行:

new X509Certificate2(Convert.FromBase64String(cerStr), string.Empty, X509KeyStorageFlags.MachineKeySet) 

此代码线将尝试在虚拟机的证书存储中添加新证书。运行时使用的所有证书都需要托管在商店的某个地方。这不是一个好主意,因为托管应用程序服务的虚拟机的证书存储不应该存储任何东西,它是基础架构的一部分,当您使用应用程序服务时,这并不关心您的关注。

您需要做的是通过Azure门户上传证书(如果尚未存在)。为此,我最终重复了SSL证书。完成此操作后,您可以在代码中撤回该证书。您将需要在Azure Portal中的"应用程序设置"键下添加一个新的应用程序设置,以供您的应用服务,名为nods_load_certificates。该值应该是证书的指标。

要检索证书,您应该做这样的事情:

public async Task<X509Certificate2> GetCertificate(string certificateThumbprint)
{
    var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly);
    var cert = store.Certificates.OfType<X509Certificate2>()
        .FirstOrDefault(x => x.Thumbprint == certificateThumbprint);
    store.Close();
    return cert;
}

您可以通过使用Azure Resource Explorer https://resources.azure.com/

来获得订阅来获得证书的指标。

正如弗雷德里克(Fredrik

X509Certificate2 x509 = new X509Certificate2(Convert.FromBase64String(cerStr), string.Empty, X509KeyStorageFlags.MachineKeySet)

在Azure WebApp中,如果我们尝试使用证书,则需要从Azure Portal上传证书。在Azure WebApp应用程序中添加带有指纹值的WEBSITE_LOAD_CERTIFICATES。更多详细信息,请参阅博客。

Web应用程序访问证书,摘要代码

    static void Main(string[] args)
    {
      X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
      certStore.Open(OpenFlags.ReadOnly);
      X509Certificate2Collection certCollection = certStore.Certificates.Find(
                                 X509FindType.FindByThumbprint,
                                 // Replace below with your cert's thumbprint
                                 “E661583E8FABEF4C0BEF694CBC41C28FB81CD870”,
                                 false);
      // Get the first cert with the thumbprint
      if (certCollection.Count > 0)
      {
        X509Certificate2 cert = certCollection[0];
        // Use certificate
        Console.WriteLine(cert.FriendlyName);
      }
      certStore.Close();
    }

相关内容

  • 没有找到相关文章

最新更新