استخدام DPAPI/ProtectedData في بيئة مزرعة ويب مع مخزن المستخدم

كنت أتساءل إذا كان أي شخص قد استخدمت بنجاح DPAPI مع متجر المستخدم في بيئة مزرعة على شبكة الإنترنت؟

نظرًا لأن تطبيقنا قد تم تحويله مؤخرًا من تطبيق 1.1 إلى 2.0 ASP.NET ، فنحن نستخدم مجمّع مخصص يسمّي مباشرةً الطرق CryptUnprotect . ولكن يجب أن يكون هذا هو نفس طريقة ProtectedData </​​code> المتوفرة في إطار 2.0.

نظرًا لأننا نعمل في بيئة مزرعة ويب ، لا يمكننا ضمان أن الجهاز الذي قام بالتشفير سيكون هو الجهاز الذي يقوم بفك التشفير. (أيضا لأن فشل الجهاز لا يجب أن يدمر بياناتنا المشفرة).

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

المشكلة التي لدينا هي أن المعلومات المشفرة على جهاز واحد لا يمكن فك تشفيرها على جهاز آخر ، وهذا يفشل مع الخطأ win32:

"المفتاح غير صالح للاستخدام في الحالة المحددة".

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

إذا كانت هذه هي المشكلة ، فكيف يتم استخدام DPAPI مع مخزن المستخدم في بيئة مزرعة ويب؟

3
مرحبا ، هل حصلت على الجواب على هذا؟ أواجه نفس المشكلة.
وأضاف المؤلف user6535, مصدر

3 إجابة

في بيئة مزرعة الويب ، بدلاً من استخدام DPAPI لتشفير/إلغاء تشفير بياناتك بشكل مباشر ، ستستخدمها بدلاً من ذلك لتشفير المفتاح الذي تستخدمه لاحقًا لفك تشفير البيانات المحمية.

ستقوم "بتثبيت" المفتاح على كل خادم كجزء من عملية النشر. يجب أن يعمل البرنامج النصي للتثبيت تحت هوية AppPool ، ويمكن تخزين المفتاح المشفر في ملف app.config أو في السجل.

يمكن تخزين البيانات المشفرة نفسها في مستودع/قاعدة بيانات مركزية ، بحيث يمكن الوصول إليها من قبل جميع الخوادم في المزرعة. لفك تشفير البيانات ، سيقوم تطبيق الويب باسترداد المفتاح المشفر من مكان تثبيته ، واستخدام DPAPI لفك تشفيره ، ثم استخدام النتيجة لفك تشفير البيانات التي تأتي من المستودع المركزي.

الجانب السلبي هو أن مفتاح النص الواضح قد يكون موجودًا على القرص المحلي لفترة قصيرة أثناء عملية التثبيت الأولي ، حيث قد يتعرض لموظفي العمليات. يمكنك إضافة طبقة إضافية من التشفير ، كما هو الحال مع machine.eyfig web.config ، إذا كان هذا مصدر قلق.

8
وأضاف
هذا أمر مؤسف ، لأن إحدى مزايا DPAPI هي أنه ينتهي تلقائيًا من المفتاح الرئيسي كل 3 أشهر ، ومع ذلك فهو قادر على فك تشفير البيانات المشفرة سابقًا. msdn.microsoft.com/en-us/library/ms995355.aspx اقتباس: "هذا انتهاء الصلاحية يمنع مهاجم من تسوية MasterKey واحد والوصول إلى كافة البيانات المحمية للمستخدم". باستخدام مفتاحك الخاص في حالة اختراقه ، يتم كشف جميع بياناتك.
وأضاف المؤلف ToddK, مصدر
هذا شيء قديم ، لكنني أعتقد أنه سيظل بإمكانك "رؤية" المفتاح حتى وإن كان موجودًا في web.config ومشفرة باستخدام aspnet_regiis . النهج الخاص بك هو ما يبحث عنه معظم الأشخاص حيث لا توجد آلية مشابهة جاهزة في ASP.NET أو BCL.
وأضاف المؤلف CodeMonkeyKing, مصدر

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

لا يمكنك استخدام DPAPI بالطريقة التي تريدها مع الحسابات المحلية لأنه لا يتم تبادل المادة الرئيسية بين الخوادم.

امل ان يساعد!

2
وأضاف

The Microsoft poster is wrong. http://support.microsoft.com/default.aspx?scid=kb;en-us;309408#6

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

يبدو أن DPAPI لن تعمل في إعداد مزرعة. أعتقد أن هذا الإشراف كبير على جزء Microsoft ويجعل DPAPI غير مجدية تقريبًا لمعظم تطبيقات المؤسسات.

1
وأضاف