28

मेरे पास एक कस्टम विन्यास अनुभाग के साथ एक वेब अनुप्रयोग है। उस अनुभाग में ऐसी जानकारी है जिसे मैं एन्क्रिप्ट करना चाहता हूं (यह स्वयं की तुलना में ASPNet_RegIIS का उपयोग करने की उम्मीद कर रहा था)।कस्टम कॉन्फ़िगरेशन अनुभाग एन्क्रिप्ट करने के लिए 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> 

विन्यास हैंडलर यह एन्क्रिप्ट करने के लिए प्रयास करने से पहले अच्छा काम करता है। जब मैं के साथ एन्क्रिप्ट करने के लिए प्रयास करें: प्रदाता के लिए कॉन्फ़िगर बिना

Encrypting configuration section... An error occurred creating the configuration section handler for MyCustomSection: Could not load file or assembly 'MyAssembly' or one of its dependencies. The system cannot find the file specified. (c:\inetpub\wwwroot\MyWebsite\web.config line 5)

मैं के साथ की कोशिश की है /:

aspnet_regiis -pef "MyCustomSection" c:\inetpub\wwwroot\MyWebsite -prov DataProtectionConfigurationProvider

मैं कोई त्रुटि मिलती है। अनुभाग समूहों के साथ/बिना। हाथ से पहले वेबसाइट शुरू करने के साथ/बिना। मैंने अस्थायी रूप से पंजीकरण के लिए जीएसी में अपनी असेंबली डालने की कोशिश की है। मैंने अपने लॉग 4नेट सेक्शन को कुछ भी करने की कोशिश की जो कि मेरी नहीं थी, बिना किस्मत के। मैंने कमांड प्रॉम्प्ट को व्यवस्थापक के रूप में चलाया है। कोई विचार? या ASPNet_RegIIS को कस्टम अनुभागों के लिए उपयोग नहीं किया जा सकता है? MSDN को देखने के बाद

एक अंतिम शॉट मेरी हैंडलर बदल रहा था बल्कि IConfigurationSectionHandler को लागू करने के बाद से यह तकनीकी रूप से 2.0 में पदावनत किया गया था (उम्मीद यह aspnet_regiis संस्करण के बारे में कुछ था) से ConfigurationSection से प्राप्त करना। वहां कोई भाग्य नहीं है।

कोई भी विचार मुझे बताता है। धन्यवाद!

+0

मुझे एक ही समस्या मिली। मुझे नहीं लगता कि नीचे दिए गए जवाब में जीएसी या हैक में असेंबली डाले बिना यह काम करने का कोई तरीका है? –

+0

मैं इसके साथ झुकाव से थक गया था - इसलिए मैं अस्थायी रूप से असेंबली में असेंबली डालने के साथ चला गया। –

उत्तर

29

aspnet_regiis असेंबली को बांधने में सक्षम होना चाहिए। सामान्य .net बाध्यकारी नियम लागू होते हैं।

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

मैं तो विधानसभाओं कि कस्टम विन्यास वर्गों को परिभाषित कॉपी:

मैं aspnet_regiis.exe रूप में एक ही निर्देशिका में aspnet_regiis_bin बुलाया निर्देशिका और इस तरह एक निजी पथ के रूप में aspnet_regiis_bin के साथ एक aspnet_regiis.exe.config फ़ाइल बनाने के द्वारा इस के आसपास मिलता है aspnet_regiis_bin में aspnet_regiis उन्हें ढूंढ सकते हैं।

इस प्रक्रिया को असेंबली को मजबूत नाम या जीएसी में होने की आवश्यकता नहीं है, लेकिन फ्रेमवर्क निर्देशिकाओं में घूमने की आवश्यकता होती है।

+0

क्या आप कृपया http://stackoverflow.com/questions/786661/using-aspnet-regiis-to-encrypt-custom-configuration-section-can-you-do-it का उत्तर दे सकते हैं? – Lijo

+3

प्रतिभा !! एनबी: इसे C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ फ़ोल्डर में रखना सुनिश्चित करें, फ्रेमवर्क 64 फ़ोल्डर –

4

यह कुल हैक है, लेकिन मुझे यकीन नहीं है कि ऐसा करने का एक और तरीका है जो असेंबली को दृढ़ता से नामित करता है जो आपके कस्टम सेक्शन को परिभाषित करता है और इसे GACifying करता है (हालांकि आपने उल्लेख किया है कि यह काम नहीं करता है, या तो मैं मुझे यकीन नहीं है कि यह क्यों नहीं होगा)। चूंकि aspnet_regiis < ड्राइव>: \ Windows \ Microsoft.Net \ Framework \ < संस्करण> फ़ोल्डर (WinXP में) में चलता है, तो आप DLL को कॉपी कर सकते हैं जो आपके कॉन्फ़िगरेशन अनुभाग को प्रासंगिक फ्रेमवर्क \ < संस्करण> फ़ोल्डर में परिभाषित करता है, और फिर यह कार्य करना चाहिए।

+1

जब मैंने इसे जीएसी में स्थानांतरित किया तो इसे एक मजबूत नाम से हस्ताक्षर किया गया था। मैंने अपने कॉन्फ़िगरेशन/section.type में संस्करण/संस्कृति/सार्वजनिक कुंजी को शामिल करना भी सुनिश्चित किया है। यद्यपि आपका समाधान मुझे मिल गया, धन्यवाद। यदि किसी और ने कभी इसका सामना किया है तो मैंने डीएल को फ्रेमवर्क फ़ोल्डर में स्थानांतरित कर दिया है क्योंकि उत्तर बताता है कि व्यवस्थापक के रूप में aspnet_regiis को चला रहा है (विंडोज सर्वर 2007)। –

+0

चारों ओर झुकाव के बाद मुझे इसे जीएसी से पंजीकरण करने के लिए मिला। मैंने कभी भी जीएसी में पंजीकरण करने और एक ही समय में लंबे फॉर्म का उपयोग करने की कोशिश नहीं की (हालांकि मैंने अलग-अलग समय पर दोनों किया था)। इसके बारे में सोचने के बाद, यह सही समझ में आता है कि विधानसभा को जीएसी में होना आवश्यक होगा। एक बार फिर धन्यवाद। –

+0

बहुत बढ़िया। मुझे इसके साथ कुछ परेशानी हो रही थी। –

2

उत्तर जो सही के रूप में दिखाया गया है सही है। मैं एक टिप्पणी जोड़ना चाहता था लेकिन ऐसा नहीं कर सका क्योंकि यह एक टिप्पणी (नमूना विन्यास प्रविष्टियों) का बहुत लंबा है।

अनुभाग का नाम असेंबली के पूर्ण नाम का उपयोग करना चाहिए। एक रनटाइम असेंबली योग्यता 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> 
13

मैं एक समाधान जिससे मैं अस्थायी रूप से configSections तत्व की सामग्री बाहर टिप्पणी उपयोग कर रहा हूँ:

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

फिर आप सामान्य रूप से aspnet_regiis -pef का उपयोग करके एन्क्रिप्शन चला सकते हैं। इसके बाद अनुभाग में केवल असुविधा हो गई है और आपकी साइट चलाने के लिए तैयार है।

+0

धन्यवाद। मैं आपके सुझाव का उपयोग करके प्रक्रिया को स्वचालित करने में सक्षम था (कुछ पावरहेल अनुभाग नाम से टिप्पणी करते हैं, फिर aspnet_regiis चलता है और फिर टिप्पणियां पावरहेल के माध्यम से फिर से हटा दी जाती हैं)। –

3

रिकॉर्ड के लिए, मैं अपने लिए ऐसा करने के लिए थोड़ा रखरखाव पृष्ठ समाप्त कर चुका हूं।

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(); 
} 

चेतावनी: आपकी प्रक्रिया को संशोधित कॉन्फ़िगरेशन फ़ाइलों को लिखने की आवश्यकता होगी। आप इसे अधिकृत करने के लिए कुछ तरीका चाहते हैं कि यह कौन चला सकता है। जब आप सहेजते हैं तो आप generally वेबसाइट को पुनरारंभ करेंगे।

संबंधित मुद्दे