تحميل مفتاح عميل SSL مؤقتًا لمصادقة العميل في C #

أستخدم عنصر تحكم WebBrowser لإضافة WebInterface إلى التطبيق C #. رغبتي هي التحقق من أن هذا التطبيق فقط قادر على الاتصال بخادم الويب الخاص بنا باستخدام شهادات عميل SSL.

كانت فكرتي هي تضمين شهادة العميل في التطبيق واستخدامها فقط عند الاتصال عبر تطبيقي. أي شخص لديه sugestion على كيفية القيام بذلك؟ أو الطريقة الوحيدة لجعلها تعمل هي تحميل المفتاح في X509Store.

إذا قمت بوضعه في X509Store ، فهل سيوفر المفتاح الخاص بي للاستخدام العام لـ Internet Explorer؟

0
وأضاف
الآراء: 1

3 إجابة

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

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

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

0
وأضاف

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

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

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

0
وأضاف

لذلك ، هناك العديد من الأفكار هنا:

1.

أنا أتفق مع "erickson" ، التحقق من أن التطبيق الخاص بك فقط يمكن التواصل مع التطبيق يكاد يكون من المستحيل مع التصميم الحالي الخاص بك. إنها مجرد مسألة وقت قبل أن يقوم شخص ما بتعديل تطبيقك الخاص بالمحرك ثم تنتهي اللعبة (إذا كان هذا هو شكل الأمان فقط). إذا كنت تريد التحقق من صحة تطبيقك ومستخدم صالح ، فأنت بحاجة إلى مصادقة المستخدم بالإضافة إلى بعض آلية التحقق من توقيع التطبيق المعني (والتي لا أعتقد أنها ممكنة في نموذج خادم العميل. ..بعد كل ما يمكنني أن أقوله دائمًا أن تطبيق "hackyou" لديه نفس التوقيع مثل "realapp" ولا يمكنك التحقق من ذلك من جانب الخادم)

2.

تذكر أن عنصر تحكم WebBrowser هو في الأساس غلاف حول IE ، لذلك بدون بعض الحيل (التي سأحصل عليها في ثانية) ، سيكون عليك إضافة الشهادة إلى مخزن المستخدم.

3.

إليك طريقة متهورة لإنجاز ما تطلبه (على الرغم من أنها فكرة سيئة):

  • استخدم أولاً WebRequest.Create لإنشاء كائن HttpWebRequest
  • يتم تحميل كائن X509Certificate2 يدويًا من أي ملف أو بث ثنائي تم تشفيره في البرنامج
  • استخدم HttpWebRequest.ClientCertificates لإضافة الشهادة إلى طلب الويب
  • أرسل الطلب واحصل على الرد
  • أرسل الاستجابة إلى WebBrowser بالضغط على ResponseStream من HttpWebResponse إلى DocumentStream الخاص بـ WebBrowser

وهذا يعني بالضرورة أنه سيتعين عليك كتابة بعض فئات المجمّع لمعالجة الطلبات والردود من وإلى الخادم واستخدام WebBrowser فقط للتعامل مع عرض HTML.

في الواقع ، تحتاج إلى إعادة التصميم والنظر في التهديدات التي تحاول التعامل معها!

0
وأضاف