2016-09-15 3 views
4

AzureでホストされているIdentity Serverウェブアプリがあります。署名のためのルートディレクトリには.pfxというファイルがあります。問題は、新しく発行されたとき、それは完全に正常に動作しますが、いくつかの時間後に、それは私はそれがファイルアクセスの問題であることを前提としていますが、なぜ突然紺碧のうちファイルアクセスをめちゃくちゃにされCryptographicException KeySet does not existsに基づいてCryptographicException: Keyset does not exist.Azure Webアプリケーションが散発的にCryptographicExceptionをスローする:Keysetが存在しません

を投げて開始することです。

+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に保存されます。このディレクトリはネットワーク共有によってサポートされており、キーがすべてのアプリインスタンスで使用できることを確認します。BUTこれはデプロイメントスロットには当てはまりません。したがって、ある展開スロットから別の展開スロットに切り替えると、キーが変更され、アプリケーションがペイロードの保護を解除しようとすると、CryptographicException: Keyset does not existが表示されます。

あなたのアプリが常に同じキーを使用していることを確認するには、異なるキーストレージプロバイダを設定する必要があります。私。バッキングストアとしてRedisまたはAzure Blobストレージを使用してください。

これを構成する方法の詳細については、official documentationを参照してください。

また、my blogの問題についても説明しました。

関連する問題