6 Stimmen

"Der RSA-Schlüsselcontainer konnte nicht geöffnet werden" Fehler auch nach ACL-Erlaubnis (für einige Benutzer)

Wir erhalten den folgenden Fehler (in asp.net Website), wenn die Verschlüsselung angewendet.

Parser-Fehlermeldung: Entschlüsselung mit Anbieter 'RsaProtectedConfigurationProvider' fehlgeschlagen. Fehlermeldung des Providers: Der RSA-Schlüsselcontainer konnte nicht geöffnet werden.

Hinweis: Bitte beachten Sie die unten aufgeführten Schritte, die wir durchgeführt haben. (Wir haben die ACL-Erlaubnis für NT Authority erteilt \Network Dienst auf NetFrameworkConfigurationKey)

Hinweis: Wir verwenden Windows Authentication Enabled und ASP.NET Impersonation Enabled in IIS7 . Es läuft in Windows Server 2008 . Der Zugriff wird auf der Grundlage gesteuert, ob ein Benutzer Teil einer zulässigen AD-Gruppe ist (die in der Konfigurationsdatei aufgeführt wird).

Der interessante Teil ist, dass dieser Fehler auftritt, wenn Benutzer der Gruppe1 (von Standort1) darauf zugreifen. Wenn Benutzer der Gruppe2 (von Standort2) versuchen, darauf zuzugreifen, tritt der Fehler nicht auf.

Haben Sie eine Idee, wie man das korrigieren kann?

Wir haben die unten aufgeführten Schritte aus unserem Verteilungsdokument befolgt.

  1. Führen Sie das Befehlsfenster im Administratormodus aus. (In Windows Server 2008 geben Sie cmd ein und drücken STRG+SHIFT+ENTER)
  2. Gehen Sie zum Ordner C:\Windows\Microsoft.Net\Framework\v4.0.30319\ mit dem Befehl change directory (cd).
  3. Geben Sie den folgenden Befehl ein, um einen RSA-Schlüsselcontainer zu erstellen. aspnet_regiis -pc "NetFrameworkConfigurationKey" -exp
  4. Geben Sie Folgendes ein (um eine ACL für den Zugriff auf den RSA Key Container hinzuzufügen) und drücken Sie die Eingabetaste aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority \Network Dienst"
  5. Geben Sie Folgendes ein (nachdem Sie den markierten Text durch den Ort ersetzt haben, an dem der Dienst bereitgestellt wird) und drücken Sie die Eingabetaste, um die Verbindungszeichenfolge in der Web.Config des Dienstes zu verschlüsseln. aspnet_regiis.exe -pef "connectionStrings" " C:\MyWCF\ServiceName "
  6. Geben Sie Folgendes ein (nachdem Sie den markierten Text durch den Ort ersetzt haben, an dem die Website bereitgestellt wird) und drücken Sie die Eingabetaste, um die Verbindungszeichenfolge in der Web.Config der Website zu verschlüsseln. aspnet_regiis.exe -pef "connectionStrings" " C:\MyWeb\WebsiteName "
  7. Geben Sie Folgendes ein (nachdem Sie den hervorgehobenen Text durch den Ort ersetzt haben, an dem die Datei web.config für die Website verfügbar ist) und drücken Sie die Eingabetaste, um die sessionState-Werte in der Web.Config der Website zu verschlüsseln. aspnet_regiis.exe -pef "system.web/sessionState" " C:\MyWeb\WebsiteName "
  8. Überprüfen Sie, ob die Verbindungszeichenfolgen und SessionState-Werte verschlüsselt sind.
  9. Überprüfen Sie die folgenden Angaben im Abschnitt configProtectedData in Machine.Config.

- Überprüfen Sie, dass defaultProvider="RsaProtectedConfigurationProvider"

- Überprüfen Sie, dass keyContainerName="NetFrameworkConfigurationKey"

Hinweis: Der Standardspeicherort für machine.config ist C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config

13voto

LCJ Punkte 21809

Nachfolgend ein Ansatz, den ich ausprobiert habe und bei dem keine Maschinenkonfiguration erforderlich ist.

Hinweis: Wenn sich das Ziel in Windows Server 2008 befindet, müssen die Verschlüsselungsschritte in einem Windows Server 2008 selbst ausgeführt werden.

Führen Sie die folgenden Codes auf Server A aus

Hinweis:- Registrierungsschlüssel

 cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
 aspnet_regiis.exe -pc "MyProjectKeys" -exp

Hinweis: - ZUGANG nur auf SERVER A gewähren

aspnet_regiis.exe -pa "MyProjectKeys" "IIS APPPOOL\testpsreloservices"
aspnet_regiis.exe -pa "MyProjectKeys" "NT AUTHORITY\NETWORK"

Exportierte XML-Datei mit RSA-Schlüssel

aspnet_regiis.exe -px "MyProjectKeys" E:\wmapps\webroot\myservice\MyProjectKey.xml –pri

In der web.config wurde Folgendes hinzugefügt

<configProtectedData>
  <providers>
    <clear/>
<remove name="RSAProtectedConfigurationProvider" />
     <add name="RSAProtectedConfigurationProvider" keyContainerName="MyProjectKeys" 
    type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,&#xD;&#xA;                
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,&#xD;&#xA; processorArchitecture=MSIL"
          useMachineContainer="true" />
  </providers>
</configProtectedData>

Verschlüsselt

aspnet_regiis -pef "connectionStrings" "E:\wmapps\webroot\myservice" -prov "RsaProtectedConfigurationProvider"

Kopieren Sie die verschlüsselten Dateien auf Server B. Kopieren Sie die Schlüssel-xml-Datei auf den B-Server.

Batch-Datei mit den folgenden Befehlen erstellt und ausgeführt (für die Schlüsselregistrierung und die Gewährung des Zugangs)

c:
cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe -pi "MyProjectKeys" E:\wmapps\webroot\myservice\MyProjectKey.xml
aspnet_regiis.exe -pa "MyProjectKeys" "IIS APPPOOL\testpsreloservices"
aspnet_regiis.exe -pa "MyProjectKeys" "NT AUTHORITY\NETWORK"

5voto

Andy Wilson Punkte 1383

Wenn Sie die Impersonation aktiviert haben, wird auf den RSA-Schlüsselcontainer mit der Identität des Benutzers zugegriffen, der auf die Anwendung zugreift - und nicht mit dem Netzwerkdienst.

Sie müssen entweder die Impersonation deaktivieren oder alle Benutzer, die auf die Anwendung zugreifen können, zur ACL des Schlüsselcontainers hinzufügen.

0voto

eaglei22 Punkte 2311

In meinem Fall hatte ich meine Verbindungszeichenfolgen mit ASPNET_REGIIS verschlüsselt. Ich hatte noch eine letzte Anwendung, die ich endlich ändern konnte, um von einem älteren Server auf diesen Server umzuziehen, auf dem der Verschlüsselungsschlüssel verwendet wurde. Eine ältere Version dieser Anwendung war bereits im Einsatz, wurde aber nicht verwendet. Als ich die neueste Version auf dem Server bereitstellte (veröffentlichte), verwendete ich die Methode "Ersetzen" anstelle von "Löschen". Ich bin auf diesen Fehler gestoßen und hier gelandet. Keine der Lösungen hat bei mir funktioniert.

Meine Lösung: Ich beschloss also, den Inhalt des Anwendungsordners zu löschen und erneut zu veröffentlichen.

Auf diese Weise wurde mein Problem behoben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X