当我使用网络角色时,我只是在天蓝色门户网站上传证书,我能够看到它。现在我已经切换到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;
}
答案 0 :(得分:72)
在Azure WebSite中使用证书的方式与在IIS的本地副本中的使用方式或在从Visual Studio以调试模式运行网站时的工作方式不同。简而言之,该网站无法访问传统意义上的证书商店......这些都是在内存中完成的。
首先,一旦您通过Azure门户上传了证书,您需要添加一个名为WEBSITE_LOAD_CERTIFICATES的appsetting(也通过门户网站),并将其值设置为您上传的证书的指纹。如果您愿意,这可以是以逗号分隔的多个指纹列表,甚至*可以加载所有上传的证书。我假设这会强制将证书加载到内存中。
要加载证书,您可以执行以下操作:
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindByThumbprint, YOUR_THUMBPRINT, false);
更改&#39; false&#39;真的&#39;如果你想确保证书有效。
我在这里找到了这些信息,这比我的解释要好得多:http://azure.microsoft.com/blog/2014/10/27/using-certificates-in-azure-websites-applications/
答案 1 :(得分:11)
更新 - 2015年7月23日:这个答案现在已经过时了(虽然它在提供时是正确的)。请参阅下面的S Armstrong的答案。
在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/