2016-09-15 32 views
4

我有一個在Azure上託管的Identity Server Web應用程序。它的根目錄中有一個.pfx文件用於簽名。問題是,當新公佈其工作完全正常,但基於CryptographicException KeySet does not exists它開始投擲CryptographicException: Keyset does not exist.Azure Web應用程序偶爾會拋出CryptographicException:鍵盤集不存在

一段時間後,我會認爲這是一個文件訪問的問題,但爲什麼出突然蔚藍的是搞亂了文件訪問。

+0

我有類似的問題。我的猜測是它可能連接到數據保護鍵,但還不確定。 – NDeveloper

回答

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]; 
0

我一直在偶爾發現同樣的異常。在我的情況下,這是由於我在部署插槽之間進行交換時數據保護密鑰發生了更改。將services.AddDataProtection()用於默認配置並在Azure App Service上託管應用時,數據保護密鑰將存儲在%HOME%\ASP.NET\DataProtection-keys中。此目錄由網絡共享支持,以確保所有應用程序實例上都有密鑰,但是這不適用於部署插槽。因此,當您從一個部署槽切換到另一個部署槽時,密鑰將發生變化,當您的應用嘗試解除有效負載保護時,您將看到CryptographicException: Keyset does not exist

要確保您的應用始終使用相同的密鑰您需要配置不同的密鑰存儲提供商。即使用Redis或Azure Blob存儲作爲後備存儲。

你可以在official documentation找到更多關於如何配置它的信息。

我也描述了我在my blog上遇到的問題。

相關問題