上传到Azure网站时SSL证书不在X509Store中

7
我已经使用管理门户上传证书到我的 Azure 网站,并安装了 .pfx 证书。
现在,我正在尝试使用以下代码访问它们:
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certificateStore.Open(OpenFlags.ReadOnly);
var certificates = certificateStore.Certificates;

StringBuilder sb = new StringBuilder();

foreach (var certificate in certificates)
{
   sb.AppendLine(certificate.Subject);                
}

当发布到Azure时,一堆证书被列出,但我上传的证书没有列出。
列出的证书如下:
CN=WW.azurewebsites.windows.net, OU=CIS(RD), O=Microsoft
CN=FullOSTransport
CN=client.geo.to.stamp.azurewebsites.windows.net
CN=ma.waws-prod-am2-005.azurewebsites.windows.net, OU=OrganizationName, O=Microsoft,     
L=Redmond, S=WA, C=US
CN=FullOSTransport
CN=FullOSTransport

我从Verisign购买了证书,并且它似乎已经成功上传并显示在浏览器的“HTTPS”栏中(在Chrome中)。
任何帮助都将不胜感激,因为我现在一筹莫展。
更新
看起来我们需要转换为云服务才能使上述代码正常工作。但是,我可以像这里建议的那样将证书添加到我的app_data文件夹中吗?

http://blog.tylerdoerksen.ca/2015/11/29/pfx-certificate-files-and-azure-web-apps/

这似乎适用于Azure-Websites,无需使用Web角色。
谢谢。

对于云服务(例如作为Web角色),您需要在配置文件中添加要访问的证书的指纹,以及您正在执行的步骤。我对Azure网站的SSL证书的理解是,它仅用于加密HTTP流量,因此根据您尝试做什么,您可能需要选择Azure云服务。另外,以防万一,您尝试过其他存储位置吗? - Herve Roggero
如果您将StoreLocation更改为My,是否会有任何区别? - RichBower
没有,尝试了几种不同的组合。 - davy
1
实际上,您需要创建一个Web角色类型的新项目。它不仅是一个标准网站;它有自己的配置文件,您可以在其中指定它所识别的拇指印。这是Visual Studio中此类型项目的介绍;它包含有关如何添加证书拇指印的部分。然后,您的代码将通过拇指印加载证书。http://msdn.microsoft.com/en-us/library/hh369931.aspx - Herve Roggero
同时记住,在Azure中,你部署的是云服务中的Web角色,而不是网站。 - Herve Roggero
显示剩余4条评论
2个回答

9
我曾经遇到过类似的问题,下面是解决方法。
解决方法: 在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);

我花了两天时间解决这个问题,不知何故这对我起作用了。我正在将我的ASPNET 5 rc1(现在是Core)应用程序部署到Azure上,但它无法在启动过程中获取证书。将appsetting和通配符添加到我的部署中后,它就可以工作了。 - Lutando
这真的不适用于我,我已经找不到原因已经一个星期了。 - omeralper
我刚刚发现我一直在使用StoreLocation.LocalMachine而不是CurrentUser。现在它正在工作。谢谢。 - omeralper

2
我已经通过管理门户上传证书将.pfx安装到我的Azure网站中。
最近,我必须为Azure网站完成此过程,因此以下是我会尝试的步骤,以节省时间。
你可以进行的调试操作?
首先,远程连接到机器并查找证书是否存在。您可以使用mmc.exe和添加证书快照来查找。有关完整说明,请参见here
对于Azure Web Site,您必须通过进入Azure Management Portal并创建会话进入部署Web Site的VM来启用远程桌面。
部署证书
如果证书不存在,则必须部署它。对于测试,您可以通过使用远程会话进入VM手动导入证书。
对于网站而言,如果你想要它自动部署,你将需要更新该角色的服务定义文件以确保证书能够正确部署。同时,请记住,如果你希望该角色能够使用证书,则应上传为“服务证书”,而非“管理证书”。如果你使用Visual Studio,也可以将其添加到项目中以进行部署。 权限 此外,(尤其是如果你已手动部署了证书,例如在虚拟机上),你需要检查IIS是否有访问证书的权限。这里的页面解释了如何部署证书并授予适当的权限。如果你的证书包含在部署包中,则不需要进行此操作,因为Azure部署将会处理它。
FYI:它在本地运行是因为证书已经存在于您的代码正在查看的存储中,除非您手动删除证书,否则没有任何东西会移除证书,以验证如果您再次在本地部署,则证书将被再次部署(假设您在本地和 Azure 云上的部署完全相同)。在许多情况下,本地环境和 Azure 云环境可能不同(不幸的是),因为 Azure 将提供干净的 VM,而且一切都需要正确部署。在本地机器上,我们有很多“剩余物”。

抱歉,我应该清楚地说明这是一个Azure网站。我现在可以访问证书并可以在本地调用服务,但无法从Azure中调用。 - davy
嗨,Davy,你明确指出它是一个Azure网站,但不清楚的是它是Web Role还是在Azure VMs上的网站。看起来像是一个Web Role。无论如何,我为你提供的调试和部署意见是基于我最后一次在Azure Web Role上部署证书的经验。希望对你有所帮助,但是你的经验可能会有所不同。 - Omer Iqbal
@davy,抱歉让你感到困惑。我登录了manage.windowsazure.com并发现Web Site是以前称为web role的东西。我还在使用旧术语,所以你说得很清楚。我很抱歉。我更新了我的回复以便更加清晰,但由于我也在部署Web Site,所以检查证书的方法应该是相同的。不知道这个问题是否已经解决了。 - Omer Iqbal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接