在azure网站中访问上传的证书

本文关键字:证书 访问 azure 网站 | 更新日期: 2023-09-27 18:04:42

当我使用web角色时,我只是在azure门户中上传证书,我能够看到它。现在我已经切换到azure中的网站,我在azure管理门户中上传了证书,但我的代码根本看不到它。

是否有一些配置,我们需要做或其他方式访问在azure网站上传的证书。

这是我试图访问上传的证书的方式。

private List<string> GetAvailableCertificatesFromStore()
{
    var list = new List<string>();
    var store = new X509Store(StoreName.My,StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly);
    try
    {
        foreach (var cert in store.Certificates)
        {
            // todo: add friendly name
            list.Add(string.Format("{0}", cert.Subject));
        }
    }
    finally
    {
        store.Close();
    }
    return list;
}

在azure网站中访问上传的证书

在Azure网站中使用证书的工作方式与在IIS本地副本中使用证书的方式不同,甚至在Visual Studio中以调试模式运行网站时也是如此。简而言之,网站无法访问传统意义上的证书存储……这些都是在内存中完成的

首先,一旦你通过Azure门户上传了证书,你需要添加一个名为WEBSITE_LOAD_CERTIFICATES的应用设置(也是通过门户),并将其值设置为你上传的证书的拇指指纹。如果您愿意,它可以是一个逗号分隔的多个拇指指纹列表,或者甚至是*来加载您上传的所有证书。我假定这将强制将证书加载到内存中。

然后加载您的证书,您可以执行以下操作:

var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindByThumbprint, YOUR_THUMBPRINT, false);

如果要确保证书有效,请将'false'更改为'true'。

我在这里找到了这个信息,它比我有更好的解释:http://azure.microsoft.com/blog/2014/10/27/using-certificates-in-azure-websites-applications/

更新- 2015年7月23日:这个答案现在已经过时了(虽然它在提供的时候是正确的)。

Azure Cloud Services (Web/Worker Roles)Azure Websites中情况不同。在Azure云服务中,当您通过管理门户上传证书并在角色属性中指定该证书的指纹和安装位置时,当您的角色部署在VM中时,负责该角色的结构控制器也会自动为您安装这些证书。这就是上面的代码在web角色中工作的原因。

在网站上,你需要自己做这个。不幸的是,由于Azure网站的安全限制,您无法在证书存储中安装证书。要使用证书,您需要在代码中包含证书的PFX文件,并使用该证书文件。您无法在证书存储区中安装证书。

在我对Azure网站和证书所做的任何小工作中,我发现证书只有在PFX文件包含在AppData文件夹中才有效。你也可能遇到像CryptographicException: The system cannot find the file specified这样的错误。如果您遇到这个错误,您可能会发现这篇博客文章很有用:http://blog.tylerdoerksen.com/2013/08/23/pfx-certificate-files-and-windows-azure-websites/