6

我有一个Identity Server托管在 Azure 上的 Web 应用程序。它的根目录中有一个.pfx文件用于签名。问题是,当新发布时它工作得很好,但过了一段时间它开始抛出CryptographicException: Keyset does not exist.

基于CryptographicException KeySet 不存在,我认为这是一个文件访问问题,但为什么突然天蓝色会弄乱文件访问。

4

2 回答 2

3

我偶尔会看到同样的异常。就我而言,这是由于我在部署槽之间交换时数据保护密钥发生变化引起的。使用services.AddDataProtection()默认配置并在 Azure 应用服务上托管应用时,数据保护密钥存储在%HOME%\ASP.NET\DataProtection-keys. 此目录由网络共享支持,以确保密钥在您的所有应用程序实例上都可用,部署槽并非如此。因此,当您从一个部署槽切换到另一个部署槽时,密钥将发生变化,您将看到CryptographicException: Keyset does not exist您的应用何时尝试取消对有效负载的保护。

为确保您的应用始终使用相同的密钥,您需要配置不同的密钥存储提供程序。即使用 Redis 或 Azure Blob 存储作为后备存储。

您可以在官方文档中找到有关如何配置它的更多信息。

我还在我的博客上描述了我遇到的问题。

于 2017-02-25T07:03:17.310 回答
0

我建议您不要先从磁盘中检索您的签名证书。而是将证书上传到 Azure 门户中的关联 Web 应用程序。

并在应用程序启动时检索证书

就像是。

X509Certificate2 Certificate = null;
var certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
var certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint,"CERTIFICATE_THUMBPRINT_HERE",false);
Certificate = certCollection[0];
于 2016-09-18T18:36:48.243 回答