كيفية تحديد قبول شهادات مصادقة العميل في .صافي SslStream

StackOverflow https://stackoverflow.com/questions/53824

  •  09-06-2019
  •  | 
  •  

سؤال

أنا محاولة استخدام .صافي النظام.الأمن.SslStream فئة إلى عملية جانب الملقم من SSL/TLS مع تيار مصادقة العميل.

لأداء المصافحة, أنا باستخدام هذا الكود:

SslStream sslStream = new SslStream(innerStream, false, RemoteCertificateValidation, LocalCertificateSelectionCallback);
sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Default, false);

للأسف ، هذه النتائج في SslStream تحيل CertificateRequest تحتوي على subjectnames من جميع الشهادات في CryptoAPI المخزن الجذر الموثوق بها.

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

يبدو أن SslStream يستخدم SSPI/SecureChannel تحتها ، حتى إذا كان أي شخص يعرف كيفية القيام تعادل مع API, التي من شأنها أن تكون مفيدة أيضا.

أي أفكار ؟

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

المحلول

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

وأنا حلها باستخدام أحادية الطبقة مكتبة تنفيذ النظام.الأمن.SslStream الذي يعطي أفضل للوصول إلى تجاوز خوادم السلوك أثناء المصافحة.

نصائح أخرى

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

إذا كان هذا هو شيء لا تريد أن يحدث ذلك يمكنك نشر الجذر الخاص بك متجر محليا.

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

ولكن إذا كان من الممكن أن تبطل الشهادة الجذر في مخزن واحد, من المحتمل أن تؤدي إلى حل المشكلة.هل هذا ما تعنيه ؟ وإذا كان الأمر كذلك ، كيف أفعل ذلك ؟

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