مشكلة الشهادة مع آلة جديدة - بيانات الاعتماد المقدمة للحزمة غير معترف بها

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

سؤال

أقوم بتثبيت خدمة Windows على جهاز جديد. تقوم الخدمة بعمليات مختلفة عبر SSLStream عبر TCP ، والتي تستخدم الشهادة في المشكلة.

تعمل الخدمة بشكل جيد مع نفس الرمز ونفس الشهادة على آلات Windows 2003 الأخرى. ولكن هذا الجهاز الجديد هو Windows 2003 مع معالج 64 بت أيضًا.

أنا أواجه هذه المشكلة عندما أحاول تشغيل الخدمة بهوية "حساب الخدمة". إنه يعمل بشكل جيد مع أوراق الاعتماد الخاصة بي. (مرة أخرى ، يعمل بشكل جيد على آلات 2 أخرى مع حساب الخدمة هذا)

ليس لدي "حماية قوية" ممكّنة أثناء استيراد الشهادة.

هنا تتبع المكدس.

System.componentModel.win32Exception: لم يتم التعرف على بيانات الاعتماد المقدمة للحزمة في System.net.sspiwrapper.acquirecredentialshandle (sspiinterface secmodule ، حزمة السلسلة ، نية الاعتماد ، creduse ، securecredential scc) في system.net.security.securice SecureCredential & SecureCredential) في system.net.security.securechannel.acquireclientcredentials (byte [] .net.security.securechannel.nextMessage (بايت [] الوارد ، إزاحة int32 ، عدد int32)
at System.net.security.sslstate.startSendBlob (Byte [] الواردة ، int32 عدد ، asyncprotocolrequest asyncrequest)
at System.net.security.sslstate.processReceivedBlob (Byte [] Buffer ، Int32 Count ، Asyncprotocolrequest Asyncrequest)
في System.net.security.sslstate.startreadframe (Byte [] Buffer ، int32 readBytes ، asyncprotocolrequest asyncrequest)
في system.net.security.sslstate.startreceiveblob (byte [] العازلة ، asyncprotocolrequest asyncrequest) في system.net.security.sslstate.checkcompletionbeforenextreceive (protocoltoken ، عدد int32 الوارد ، insyncprotocolrequest asyncrequest)
في system.net.security.sslstate.forceauthentication (Boolean recefirst ، byte [] العازلة ، asyncprotocolrequest asyncrequest)
في system.net.security.sslstate.processauthentication (lazyasyncresult lazyresult) في system.net.security.sslstream.authenticateasclient (String targethost ، checktervocation ، checkterviction ، checktervocation)

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

المحلول

لقد وجدت المشكلة وحلها.

والفكرة هي منح أذونات إلى الحساب المستخدم لهوية الخدمة.

تحتاج إلى استخدام أداة winhttpcertcfg.exe. هذا مفيد للتطبيقات باستخدام شهادات العميل للحصول على إذن.

تم شرحه بشكل جيد هنا.http://support.microsoft.com/kb/901183

بفضل Feroze Daud (http://ferozedaud.blogspot.com/) ، الذي أجابني في منتدى مختلف.

نصائح أخرى

لقد واجهت هذه المشكلة على حد سواء عند التشغيل تحت حساب ASP.NET أو عند استخدام خدمة Windows (ضمن حساب النظام المحلي). إذا كنت تعمل تحت ASP.NET ، في حاجة إلى استخدام Windows 2003 إلى أداة winhttpcertcfg.exe كما هو موضح في CDPNET أعلاه. يتيح لك Windows 2008 R2 الوصول إلى الحقوق باستخدام واجهة المستخدم الرسومية ، وهو تحسن لطيف.

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

هذا هو الفرق الذي وجدته ...

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

لسبب ما ، يقوم هذا بإصلاحه ويعين الأذونات الصحيحة لاستخدام الشهادة. حظا طيبا وفقك الله!

كنت أفعل ما تم وصفه هنا لـ Win 2003 Serv ولم أستطع تشغيله بسبب MSSG "بيانات الاعتماد المقدمة إلى الحزمة غير معترف بها".

جربت كل الحلول المذكورة أعلاه دون نجاح.

أخيرًا ، جعلتها تعمل بما يلي:

  1. MakeCert -Pe -n "Cn = cert" -SS my -sr localmachine -a sha1 -sky Exchange -eku 1.3.6.1.5.5.7.3.1 -in مزود التشفير "-sy 12 cert.cer
  2. باستخدام نسخة MMC من الجذر الشخصي إلى الجذر الموثوق
  3. استخدم الشهادة التي تم إنشاؤها (.R) لمكالمة X509 من تطبيق الخدمة الخاص بك.

لماذا ... من يعرف ..... سعيد لأنه عمل بالنسبة لي .... نأمل أن يجعل هذا الأمر أسهل على الآخرين

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