سؤال

وأنا أحاول أن استخدام فئة HttpListener في C # التطبيق لديك خادم صغير يخدم المحتوى عبر SSL. من أجل القيام بذلك ولست بحاجة لاستخدام أداة httpcfg. لدي ملف .pfx مع بلدي الزوج المفتاح العام والخاص. إذا كنت استيراد هذا زوج المفاتيح يدويا باستخدام الوسائط المتعددة في مخزن الجهاز المحلي، كل شيء يعمل بشكل جيد. ومع ذلك، إذا كنت استيراد هذا زوج المفاتيح برمجيا باستخدام فئة X509Store، وأنا لست قادرا على الاتصال بي خادم صغير. لاحظ أنه في كلتا الطريقتين هو الحصول على استيراد سيرت إلى مخزن MY في LocalMachine. الغريب، وأنا قادرة على عرض الشهادة في الوسائط المتعددة مرة واحدة برمجيا استيراده وعندما عرض عليه، وUI يشير إلى أن المفتاح الخاص هو متاح أيضا لهذه الشهادة.

وحفر أعمق قليلا، لقد لاحظت أنني عندما يدويا استيراد زوج المفاتيح، أستطيع أن أرى ملف جديد يظهر في C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys، ولكن لا تظهر واحدة عندما كنت استيراد برمجيا. وعلى صعيد متصل، عندما حذف شهادة المستوردة يدويا، فإنه لا يزيل ملف المفتاح الخاص المطابق من الدليل المذكورة سابقا.

وأخيرا، سؤالي هو: متى I برمجيا إضافة شهادة إلى مخزن، حيث هو المفتاح الخاص يتم تخزينها والسبب ليس في متناول الطبقة HttpListener (HttpApi)

لاحظ أن هذا السؤال يرتبط قليلا ولكن لا أعتقد permissioning هي المشكلة لأن هذا هو كل شيء يجري كما نفس مستخدم Windows: كيفية تعيين إذن القراءة على ملف المفتاح الخاص من شهادة X.509 من صافي

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

المحلول

وطيب، وأنا أحسب من ذلك. كان عليه أن يفعل مع المعلمات التخزين الرئيسية للكائن الشهادة. على أي شخص آخر أن يعمل في هذه المشكلة، تأكد من بناء الأجسام X509Certificate2 الخاص التي تقوم بإضافتها إلى مخزن باستخدام X509KeyStorageFlags.PersistKeySet وX509KeyStorageFlags.MachineKeySet الأعلام. وهذه القوة المفتاح الخاص على التمادي في الموقع تعيين مفتاح الجهاز الذي هو مطلوب من قبل HttpApi (HttpListener يلتف هذا).

نصائح أخرى

هل هذه الطريقة 2 SSL؟ إذا كان ثم لم ترسل أكثر من ملف طلب شهادة SSL إنشاؤها على جهازك؟ وسيتم استخدام هذا الملف طلب شهادة لإنشاء SSL والتي تشكل معا زوج مفاتيح القطاعين العام والخاص.

وأيضا لم حاولت تعيين إذن سيرت لحساب المستخدم الذي يتم استخدامه لتشغيل التطبيق على شبكة الإنترنت؟ يمكنك القيام بذلك عن طريق استخدام الأداة Microsoft WSE 3.0.

وليس بالضبط الجواب على سؤالك، ولكن هنا لتكون مرجعا للآخرين يسيرون في هذا الطريق:

هنا وصلة لدردشة MS الذي يعطي عينة C # رمز ليفعل ما يفعل httpcfg، وبالتالي القضاء على الحاجة إلى أداة في نشر.

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