2016-09-15 2 views
4

Ich habe eine Identity Server Web-App, die auf Azure gehostet wird. Es hat eine .pfx Datei in seinem Stammverzeichnis zum Signieren. Das Problem ist, dass, wenn neu veröffentlichte es völlig in Ordnung, funktioniert aber nach einiger Zeit beginnt es CryptographicException: Keyset does not exist.Azure-Webanwendung löst sporadisch CryptographicException aus: Keyset existiert nicht

Basierend auf CryptographicException KeySet does not exists werfen würde ich davon ausgehen, dass es sich um einen Dateizugriff Problem ist, aber warum aus dem plötzlichen azur mit Dateizugriff vermasselt .

+0

Ich habe ähnliches Problem. Meine Vermutung ist, dass es möglicherweise mit den Datenschutzschlüsseln verbunden ist, aber noch nicht sicher ist. – NDeveloper

Antwort

0

Ich empfehle, dass Sie Ihr Signaturzertifikat nicht zuerst von der Festplatte abrufen. Laden Sie das Zertifikat stattdessen in die zugehörige Webanwendung in Azure Portal hoch.

und rufen Sie das Zertifikat auf den Anwendungsstart

so etwas wie.

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

Ich habe die selbe Ausnahme sporadisch gesehen. In meinem Fall wurde dies durch den Wechsel der Datenschutzschlüssel verursacht, wenn ich zwischen den Bereitstellungsslots wechsle. Wenn Sie services.AddDataProtection() mit der Standardkonfiguration verwenden und die App im Azure App Service hosten, werden die Datenschutzschlüssel in %HOME%\ASP.NET\DataProtection-keys gespeichert. Dieses Verzeichnis wird von einer Netzwerkfreigabe unterstützt, um sicherzustellen, dass die Schlüssel in allen Ihren App-Instanzen verfügbar sind. ABER dies ist bei Bereitstellungsslots nicht der Fall. Wenn Sie also von einem Bereitstellungssteckplatz zu einem anderen wechseln, ändern sich die Schlüssel und Sie sehen CryptographicException: Keyset does not exist, wenn Ihre Anwendung versucht, den Schutz einer Nutzlast aufzuheben.

Um sicherzustellen, dass Ihre App immer den gleichen Schlüssel verwendet, müssen Sie einen anderen Schlüsselspeicheranbieter konfigurieren: . I.e. Verwenden Sie Redis oder Azure Blob Storage als Hintergrundspeicher.

Weitere Informationen zur Konfiguration finden Sie unter official documentation.

Ich habe auch das Problem beschrieben, das ich auf my blog hatte.

Verwandte Themen