Frage

Ich versuche schon seit einiger Zeit herauszufinden, wie ich Anwendungsblöcke verschlüsseln kann, die in einer externen Datei namens dev_entlib.config gespeichert sind

Ich kann in entlib (4.1) sehen, dass es möglich ist, die Standardschutzanbieter zum Verschlüsseln der Blöcke zu verwenden, aber ich muss diese Anwendung wirklich auf verschiedenen Servern bereitstellen und daher müsste ich den zum Verschlüsseln der Anwendungsblöcke verwendeten KeyProvider auf diese exportieren Server.

Bisher habe ich einen benutzerdefinierten geschützten Konfigurationsanbieter zur Datei „machine.config“ im .net v2.0*-Ordner (und allen Zielservern) hinzugefügt.

Der benutzerdefinierte Anbieter sieht so aus

<add name="MyCompanyProvider" 
    type="System.Configuration.RsaProtectedConfigurationProvider, 
          System.Configuration, Version=2.0.0.0, Culture=neutral, 
          PublicKeyToken=b03f5f7f11d50a3a,
         processorArchitecture=MSIL"
    keyContainerName="MyKey" 
    useMachineContainer="true" />

Das passt gut zu den anderen Standardanbietern und bietet sogar Entwurfszeitunterstützung im Entlib-Konfigurationstool.Anschließend wähle ich den Schutzanbieter für jeden Block aus, den ich verschlüsseln möchte.

Ein Blick auf dev_entlib.config zeigt, dass der Block tatsächlich mit meinem Provider verschlüsselt wurde.Mein Provider verwendet meinen Schlüsselcontainer.Daher sollte der Block mit meinem Schlüsselcontainer verschlüsselt werden.Anschließend exportiere ich „MyKey“ in eine XML-Datei mit:

c:\Windows\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -px "MyKey" "C:\keys.xml" -pri
Exporting RSA Keys to file...
Succeeded!

Diese Schlüsseldatei wird dann auf meinen sysTest-Server kopiert, wo sie importiert wird und Zugriffsrechte für „NT Authority etwork Services“ und „ASPNET“ erhalten.

Dann kopiere ich meine verschlüsselte web.config und dev_entlib.config und versuche, die Verbindungszeichenfolgen auf einer kleinen Seite anzuzeigen, die .net ConfigurationManager verwendet, um die ConnectionStrings-Sammlung abzurufen und sie auf der Seite anzuzeigen.Diese Seite wird unter IIS ausgeführt und die Identität des Prozesses lautet „NT Authority etwork Services“.

Das Problem ist, dass es nicht funktioniert!Es liegen fehlerhafte Datenfehler vor oder „Entschlüsselung mit dem Anbieter MyCompanyProvider fehlgeschlagen“.

Dieser Ansatz erscheint mir logisch sinnvoll, scheitert aber trotzdem.

Hat jemand noch andere Vorschläge?

War es hilfreich?

Lösung

Verschlüsseln Sie externe Enterprise Library-Konfigurationsdateien mit Ihrem benutzerdefinierten RSA-Schlüsselcontainer mithilfe des Enterprise Library-Konfigurationstools.

  • EntLib (4.1) verwendet den Standardschutzanbieter RsaProtectedConfigurationProvider.Es ist jedoch möglich, diesen Anbieter aus Ihrer Konfigurationsdatei zu entfernen und durch Ihren eigenen mit demselben Namen zu ersetzen, der dann auf Ihren benutzerdefinierten Schlüsselanbieter verweisen kann:"Mein Schlüssel".
  • Sie sollten dies hinzufügen configProtectedData Abschnitt in der Konfigurationsdatei, der die Region enthält, die Sie verschlüsseln möchten (z. B.Ihre externe Datei:*dev_entlib.config*).Sie müssen die nicht ändern machine.config Datei überhaupt.
  • Anschließend können Sie die auswählen RsaProtectedConfigurationProvider aus der Enterprise Library Configuration-Anwendung für Anwendungsblock für den Datenzugriff Schutzanbieter.
  • Das müssen Sie öffnen EntLibConfig.exe mit Als Administrator ausführen wenn Sie Vista, Windows 7 oder Windows 2008 verwenden.
    • Andernfalls erhalten Sie eine Fehlermeldung:
      • Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Object already exists.
  • Anschließend können Sie diese verschlüsselte *dev_entlib.config* zusammen mit kopieren web.config Konfigurationsdatei zu Ihrem sysTest Server.Öffne das web.config Datei mit dem Enterprise Library Configuration Tool darauf sysTest Server sollte nicht bekomme den Fehler:
    • Failed to decrypt using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Bad Data.

web.config

Diese Datei ist ziemlich leer und verweist nur auf die externe Datenkonfigurationsdatei:

<!-- web.config -->
<configuration>
  <configSections>
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>
  <enterpriseLibrary.ConfigurationSource selectedSource="External Data Configuration File Source">
    <sources>
      <add name="External Data Configuration File Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        filePath="dev_entlib.config" />
    </sources>
  </enterpriseLibrary.ConfigurationSource>
</configuration>

dev_entlib.config

Diese Datei enthält die Verbindungszeichenfolgen und den Schutzanbieter, mit dem sie verschlüsselt werden soll:

<!-- dev_entlib.config -->
<configuration>
    <configSections>
        <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
 </configSections>
    <dataConfiguration defaultDatabase="MyConnectionStringName" />
 <connectionStrings>
  <add name="cnHnicMediaLibrary" connectionString="Server=MyDbServer; Database=MyDbName; Integrated Security=SSPI"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
  <configProtectedData>
    <providers>
      <remove name="RsaProtectedConfigurationProvider" />
      <add    name="RsaProtectedConfigurationProvider"
        keyContainerName="MyKey"
        useMachineContainer="true"
        description="Uses our own encryption key container so that it will work in a Web Farm setting. We need to trick Enterprise Library, which wants to use the default RsaCryptoServiceProvider to encrypt and decrypt, by replacing this default provider with our own while this configuration is processed!"
        type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
  </configProtectedData>
</configuration>

Bezogen auf:

Ich hoffe, dass hier die Fehlermeldung beschrieben wurde, die Sie hatten, und wie Sie sie beheben können.

Andere Tipps

Es scheint nicht möglich, noch zu sein. Meine Lösung ist, nur die Blöcke als Teil der web.config zu verschlüsseln und dann kopieren und diese Blöcke in eine externe entLib.config Datei einfügen. Dieser Block sollte dann in der Lage sein, mit den exportierten Schlüsseln auf den Zielservern entschlüsselt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top