تشفير خارجيا تخزين التطبيق كتل مع للتصدير مفتاح موفر

StackOverflow https://stackoverflow.com/questions/380772

سؤال

لقد حاولت لفترة طويلة لمعرفة كيفية تشفير التطبيق الكتل التي يتم تخزينها في ملف خارجي يسمى dev_entlib.التكوين

أستطيع أن أرى في entlib (4.1) أنه من الممكن استخدام الافتراضي حماية مقدمي تشفير كتل ولكن أنا حقا بحاجة إلى نشر هذا التطبيق على خوادم مختلفة وبالتالي سوف تحتاج إلى تصدير keyProvider المستخدمة لتشفير تطبيق كتل تلك الخوادم.

ما فعلته حتى الآن هو إضافة مخصص المحمية التكوين مزود الجهاز.config في .net v2.0* مهما المجلد (وكل ملقمات الهدف)

مخصص مزود مثل هذا

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

أن يجلس بشكل جيد بجانب الأخرى الافتراضي لمقدمي حتى دعم وقت التصميم في Entlib التكوين أداة.ثم اختيار مزود حماية لكل كتلة كنت تريد تشفير.

تبحث في dev_entlib.التكوين يظهر أن الواقع كان كتلة المشفرة مع مزود بلدي.مزود بلدي يستخدم مفتاحي الحاوية.ولذلك الكتلة يجب أن تكون مشفرة باستخدام مفتاحي الحاوية.ثم تصدير "MyKey" إلى ملف xml باستخدام:

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

هذا ملف المفتاح ثم نسخها إلى sysTest server حيث يتم استيراد و لديه حقوق الوصول الممنوحة "NT Authority etwork الخدمات" و "ASPNET"

ثم نسخ على الشبكة المشفرة.التكوين و dev_entlib.التكوين و محاولة عرض سلاسل اتصال صغير في الصفحة التي يستخدم .صافي ConfigurationManager للحصول على ConnectionStrings جمع عرضها على الصفحة.هذه الصفحة تعمل تحت IIS و هوية العملية "NT Authority etwork الخدمات".

المشكلة هي أنه لا يعمل!هناك بيانات سيئة أخطاء أو "فشل في فك تشفير باستخدام موفر MyCompanyProvider".

هذا النهج يبدو أن تجعل من المنطقي بالنسبة لي لكنه لا يزال يفشل.

لا أحد آخر اقتراحات ؟

هل كانت مفيدة؟

المحلول

تشفير الخارجية المؤسسة مكتبة ملفات التكوين الخاصة بك مع العرف مفتاح RSA الحاويات باستخدام مكتبة المؤسسة أداة التكوين.

  • EntLib (4.1) يستخدم الحماية الافتراضي موفر RsaProtectedConfigurationProvider.ولكن من الممكن أن إزالة هذا الموفر في ملف التكوين الخاص بك واستبدالها الخاصة بك مع نفس الاسم والتي يمكن أن ثم أشر إلى مفتاح مخصص مزود:"MyKey".
  • يجب إضافة هذا configProtectedData القسم في تكوين ملف المنطقة التي تريد تشفير (مثلا ، الخارجية الملف:*dev_entlib.التكوين*).أنت لا تحتاج إلى تعديل آلة.التكوين الملف على الإطلاق.
  • يمكنك بعد ذلك اختيار RsaProtectedConfigurationProvider من مكتبة المؤسسة تكوين التطبيق الوصول إلى البيانات كتلة تطبيق ProtectionProvider.
  • لديك لفتح هذا EntLibConfig.exe مع تشغيل كمسؤول إذا كنت على ويندوز فيستا, ويندوز 7, ويندوز 2008.
    • وإلا سوف تحصل على خطأ:
      • Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Object already exists.
  • يمكنك ثم نسخ هذا المشفرة *dev_entlib.التكوين* جنبا إلى جنب مع ويب.التكوين ملف التكوين الخاص بك sysTest الملقم.فتح ويب.التكوين ملف مكتبة المؤسسة أداة التكوين على أن sysTest الخادم يجب أن لا الحصول على خطأ:
    • Failed to decrypt using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: Bad Data.

ويب.التكوين

هذا الملف فارغ و مجرد نقاط البيانات الخارجية ملف التكوين:

<!-- 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.التكوين

هذا الملف يحتوي على سلاسل اتصال وحماية مزود التي يجب أن تكون مشفرة مع:

<!-- 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>

على أساس:

آمل أن يكون هذا هو موضح في رسالة الخطأ التي قد وكيفية اصلاحها.

نصائح أخرى

ولا يبدو أن يكون من الممكن حتى الان. بلدي الحل هو مجرد تشفير الكتل كجزء من الملف web.config ومن ثم نسخ ولصق تلك الكتل إلى ملف entLib.config الخارجي. هذه الكتلة يجب أن تكون ثم قادرا على فك شفرة على ملقمات الهدف مع مفتاح تصديرها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top