باستخدام ASPNET_REGIIS لتشفير قسم التكوين المخصص - هل يمكنك أن تفعل ذلك؟

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

سؤال

لدي تطبيق ويب مع قسم التكوين المخصص. يحتوي هذا القسم على معلومات أود أن تشفير (كان يأمل استخدام ASPNET_REGIIS بدلا من القيام بذلك بنفسي).

Web.config:

<?xml version="1.0"?>

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
      <configSections>
          <section name="MyCustomSection" 
                   type="MyNamespace.MyCustomSectionHandler, MyAssembly"/>
    </configSections>
<configProtectedData>
    <providers>
      <clear />
      <add name="DataProtectionConfigurationProvider"
           type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
                   Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                   processorArchitecture=MSIL"
           keyContainerName="MyKeyContainer"
           useMachineContainer="true" />
    </providers>
  </configProtectedData>
    <MyCustomSection>
       <blah name="blah1">
          <blahChild name="blah1Child1" />
       </blah>
    </MyCustomSection>

يعمل معالج التكوين بشكل رائع قبل محاولة تشفيره. عندما أحاول تشفيرها مع:

ASPNET_REGIIS -PEF "mycestomsection" c: inetpub wwwroot mywebsite -prov dataprotectionconfigverprovider

أحصل على خطأ:

قسم تشفير التكوين ... حدث خطأ في إنشاء معالج قسم التكوين ل mycustomsection: تعذر تحميل الملف أو التجميع "myassembly" أو أحد تبعياتها. لا يمكن للنظام العثور على الملف المحدد. (C: inetpub wwwroot mywebsite Web.config Line 5)

لقد حاولت مع / بدون موفر تكوينه. مع / بدون مجموعات القسم. مع / دون أن بدأ الموقع قبل اليد. لقد حاولت وضع التجمع الخاص بي مؤقتا في GAC للتسجيل. لقد جربت أيضا قسم Log4net الخاص بي لمجرد تجربة شيء لم يكن لي، دون حظ. لقد قمت بتشغيل موجه الأوامر كمسؤول. أيه أفكار؟ أو can aspnet_regiis فقط لا تستخدم للأقسام المخصصة؟

طلقة نهائية واحدة بعد المشاهدة MSDN. كان تغيير معالجي ليراث من التكوينات بدلا من تنفيذ iconfigurationsion@انسلترا حيث تم إهمالها تقنيا في 2.0 (على أمل أن يكون شيئا فيما يتعلق بإصدار ASPNENT_REGIIS). لا حظ هناك إما.

أي أفكار اسمحوا لي أن أعرف. شكرًا!

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

المحلول

aspnet_regiis يجب أن تكون قادرة على ربط الجمعية. تنطبق قواعد ملزمة .NET العادية.

أتجاهل هذا عن طريق إنشاء دليل يسمى aspnet_regiis_bin في نفس الدليل aspnet_regiis.exe و aspnet_regiis.exe.config ملف مع aspnet_regiis_bin كمسار خاص مثل هذا:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="aspnet_regiis_bin"/>
      </assemblyBinding>
   </runtime>
</configuration>

ثم نسخ التجميعات التي تحدد أقسام التكوين المخصصة في aspnet_regiis_bin لهذا السبب. aspnet_regiis يمكن أن تجد لهم.

لا يتطلب هذا الإجراء أن تكون التجميعات قوية تسمى أو في GAC ولكنها تتطلب العبث في الدلائل الإطارية.

نصائح أخرى

أنا أستخدم الحل البديل حيث أعلن مؤقتا محتويات عنصر التكوينات:

<configSection>
    <!--
    <section name="CustomSection" type="" />
    -->
</configSection>

يمكنك بعد ذلك تشغيل التشفير باستخدام aspnet_regiis -pef كل عادة. بعد أن يعمل هذا فقط uncomment القسم وموقعك جاهز للتشغيل.

هذا هو الاختراق الكلي، لكنني لست متأكدا من أن هناك طريقة أخرى للقيام بذلك دون تسمية الجمعية التي تحدد القسم المخصص الخاص بك وتقلمها (على الرغم من أنك لم تنجح، فما لست متأكدا لماذا لن). نظرا لأن ASPNET_REGIIS يعمل في مجلد <drive>: windows microsoft.net framework <الإصدار> (في WinXP)، يمكنك نسخ DLL الذي يحدد قسم التكوين الخاص بك في المجلد Framework <الإصدار>، ثم يجب أن تعمل.

للسجل، انتهى بي الأمر بصفحة الصيانة الصغيرة للقيام بذلك بالنسبة لي.

var currentConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
// Unprotect
ConfigurationSection section = currentConfig.GetSection("MyCustomSection");
if (section.SectionInformation.IsProtected)
{
   section.SectionInformation.UnprotectSection();
   currentConfig.Save();
}

// Protect
if (!section.SectionInformation.IsProtected)
{
     section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
     currentConfig.Save();
}

تحذيرات: ستحتاج عمليةك إلى كتابة الكتابة إلى ملفات التكوين التي يتم تعديلها. ستحتاج بطريقة ما إلى إذن من يمكنه تشغيل هذا. سانت عموما أعد تشغيل الموقع عند الحفظ.

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

يجب أن يستخدم اسم القسم الاسم الكامل للمجمعيات. لا يعمل مؤهل تجميع وقت التشغيل مع Aspnet_regiis.exe.

هذا يعمل:

<configSections>
  <section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security, Version=5.0.414.0, Culture=neutral, PublicKeyToken=9c844884b2afcb9e" />
</configSections>

ولكن هذا لا يعمل:

<configSections>
  <section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security" />
</configSections>

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <qualifyAssembly partialName="Microsoft.Practices.EnterpriseLibrary.Security" fullName="Microsoft.Practices.EnterpriseLibrary.Security, Version=5.0.414.0, Culture=neutral, PublicKeyToken=9c844884b2afcb9e" />
    </assemblyBinding>
</runtime>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top