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

sp9*_*sp9 26 c# azure ssl-certificate x509certificate azure-web-sites

当我使用网络角色时,我只是在天蓝色门户网站上传证书,我能够看到它.现在我已经切换到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;
}
Run Code Online (Sandbox Code Playgroud)

小智 78

在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);
Run Code Online (Sandbox Code Playgroud)

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

我在这里找到了这些信息,这比我说的要好得多:http://azure.microsoft.com/blog/2014/10/27/using-certificates-in-azure-websites-applications/

  • 花了几天后,我发现问题是StoreLocation.CurrentUser而不是StoreLocation.LocalMachine! (3认同)
  • 仅供参考,如果您使用的是指纹列表但事情仍然无效,则应检查字符串中是否有隐形字符.我刚刚发现我列出的一个拇指指纹中有一个0x200E字符.由于一切看起来都正确,服务器错误令人愤怒.问题实际上是看不见的!如果您将某些应用程序设置存储在web.config中,您可以在该Web应用程序的Kudu控制台中发现服务器上存在不可见字符.隐形字符显示为非常小的灰色点. (3认同)
  • 我无法使用上面的代码阅读私钥,任何人都可以帮助解决这个问题.我试图读取用于解密数据的私钥.我甚至尝试过`cert.PrivateKey.ToXmlString(true)` (2认同)
  • 奇怪的是,必须通过门户中的_Application settings_添加_WEBSITE_LOAD_CERTIFICATES_(如果将其添加到Web.config中则不起作用) (2认同)

Gau*_*tri 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/

  • 这个答案已经过时了.请参阅S.Armstrong的答案如下 (3认同)