سؤال

أواجه مشكلة واجهتني من قبل؛لا يمكن العثور على مرجعي حول كيفية حلها.

هنا هي القضية.نقوم بتشفير قسم سلاسل الاتصال في app.config لتطبيق العميل الخاص بنا باستخدام الكود أدناه:

        config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
        If config.ConnectionStrings.SectionInformation.IsProtected = False Then
            config.ConnectionStrings.SectionInformation.ProtectSection(Nothing)

            ' We must save the changes to the configuration file.'
            config.Save(ConfigurationSaveMode.Modified, True)
        End If

المشكلة هي أن لدينا إجازة مندوب مبيعات.سيذهب الكمبيوتر المحمول القديم إلى مندوب مبيعات جديد وتحت تسجيل دخول المستخدم الجديد، وعندما يحاول القيام بذلك نحصل على خطأ.الخطأ هو:

Unhandled Exception: System.Configuration.ConfigurationErrorsException: 
An error occurred executing the configuration section handler for connectionStrings. ---> System.Configuration.ConfigurationErrorsException: Failed to encrypt the section 'connectionStrings' using provider 'RsaProtectedConfigurationProvider'. 
Error message from the provider: Object already exists.
---> System.Security.Cryptography.CryptographicException: Object already exists
هل كانت مفيدة؟

المحلول 2

لقد وجدت حلاً أكثر أناقة في إجابتي الأصلية لنفسي.لقد اكتشفت أنني قمت بتسجيل الدخول للتو باعتباري المستخدم الإلكتروني الذي قام بتثبيت التطبيق في الأصل وتسبب في تشفير سلاسل اتصالات ملف التكوين والانتقال إلى دليل .net Framework في موجه الأوامر وتشغيله

aspnet_regiis -pa "NetFrameworkConfigurationKey" "{domain}\{user}"

لقد أعطى المستخدم الآخر إذنًا للوصول إلى حاوية مفتاح تشفير RSA ثم يعمل مع المستخدم (المستخدمين) الآخرين.

أردت فقط إضافتها هنا لأنني اعتقدت أنني قمت بتدوين هذه المشكلة على مدونة التطوير الخاصة بنا ولكنني وجدتها هنا، لذا في حالة رغبتي في البحث عنها مرة أخرى، فستكون هنا.سيتم إضافة رابط إلى نقطة مدونة التطوير الخاصة بنا في هذا الموضوع أيضًا.

نصائح أخرى

http://blogs.msdn.com/mosharaf/archive/2005/11/17/protectedConfiguration.aspx#1657603

نسخ ولصق : د

الاثنين 12 فبراير 2007 الساعة 12:15 صباحًا بقلم نايكا

يكرر:تشفير ملفات التكوين باستخدام التكوين المحمي

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

  1. لإنشاء حاوية مفاتيح RSA على مستوى الجهاز

    aspnet_regiis -pc "DataProtectionConfigurationProviderKeys" -exp
    
  2. أضف هذا إلى web.config قبل قسم سلاسل الاتصال:

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

    لا تفوت <clear /> من اعلى!مهم عند اللعب بالتشفير/فك التشفير عدة مرات

  3. تأكد من وجود هذا في أعلى ملف Web.Config.إذا مفقود أضفه:

    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    
  4. احفظ وأغلق ملف Web.Config في VS (مهم جدًا!)

  5. في نافذة موجه الأوامر (جهاز الكمبيوتر المحلي الخاص بي)، انتقل إلى:

    C:\WINNT\Microsoft.NET\Framework\v2.0.50727

  6. تشفير:(كن على دراية بتغيير المسار الفعلي لتطبيقك، أو استخدم خيار -app وقم بإعطاء اسم الدليل الظاهري للتطبيق!لأنني استخدمت VS على جهاز الكمبيوتر الخاص بي، فضلت الخيار أدناه.المسار هو المسار إلى ملف Web.config)

    aspnet_regiis -pef "connectionStrings" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"

    aspnet_regiis -pef "system.web/membership" "c:\Bla\Bla\Bla" -prov "DataProtectionConfigurationProvider"

  7. لفك التشفير (إذا لزم الأمر فقط!):

    aspnet_regiis -pdf "connectionStrings" "c:\Bla\Bla\Bla"
    
    aspnet_regiis -pdf "system.web/membership" "c:\Bla\Bla\Bla"
    
  8. حذف حاوية المفاتيح (إذا لزم الأمر فقط!)

    aspnet_regiis -pz "DataProtectionConfigurationProviderKeys"
    
  9. احفظ المفتاح أعلاه في ملف xml لتصديره من جهاز الكمبيوتر المحلي لديك إلى خادم الويب (UAT أو الإنتاج)

    aspnet_regiis -px "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml -pri
    
  10. قم باستيراد حاوية المفاتيح على خوادم WebServer:

    aspnet_regiis -pi "DataProtectionConfigurationProviderKeys" \temp\mykeyfile.xml
    
  11. منح الوصول إلى المفتاح الموجود على خادم الويب

    aspnet_regiis -pa "DataProtectionConfigurationProviderKeys" "DOMAIN\User"
    

    راجع في IIS مستخدم ASP.NET أو استخدم:

    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name
    
  12. قم بإزالة منح الوصول إلى المفتاح الموجود على خادم الويب (فقط إذا لزم الأمر!)

    aspnet_regiis -pr "DataProtectionConfigurationProviderKeys" "Domain\User"
    
  13. انسخ وألصق ملف Web.config المشفر في WebServer.

لذا فقد نجحت في ذلك.

  1. إزالة حساب المستخدمين القديم من الكمبيوتر المحمول
  2. إعادة تعيين app.config ليكون القسم غير محمي
  3. إزالة ملف المفتاح من مفاتيح الجهاز كافة المستخدمين
  4. تشغيل التطبيق والسماح له بحماية القسم

ولكن كل ما فعله هو جعله يعمل لصالح هذا المستخدم.

الآن أريد أن أعرف ما يجب علي فعله لتغيير الكود لحماية القسم حتى يتمكن العديد من المستخدمين على جهاز الكمبيوتر من استخدام التطبيق.لقد جئت إلى جهاز الكمبيوتر الافتراضي (بعد إجازة WDW من الغد إلى الأربعاء القادم)!

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

يبدو وكأنه مشكلة أذونات.المستخدم (الجديد) المعني لديه أذونات الكتابة لملف app.config؟هل كان المستخدم السابق مسؤولاً محليًا أو مستخدمًا قويًا كان بإمكانه إخفاء هذه المشكلة؟

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