WCF - لا يمكن العثور على شهادة X.509 باستخدام معايير البحث التالية

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

  •  16-09-2019
  •  | 
  •  

سؤال

حسنا، لقد رأيت العديد من الأسئلة المتعلقة بهذه المشكلة، وقد جربت الكثير من الأفكار المقدمة منها دون نجاح. ها هو وضعي:

أنا ضرب خدمة ويب عبر إنترانت شركتي. لقد استخدمت svcutil.exe لتوليد فئة العميل ل WCF. كنت قادرا على تشغيل مكالمة خدمة الويب دون أي مشكلة عندما كانت الخدمة قيد التطوير ولم تتطلب بيانات اعتماد مصادقة، لذلك أعرف أن التعليمات البرمجية تعمل. في ذلك الوقت، كان الرمز يعمل على SSL. لقد استوردت الشهادة المطلوبة في متجر مرئيات شهادات الجذر الموثوق بها، وكان كل شيء على ما يرام.

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

هنا مثال على التكوين الناتج عن Svcutil:

<system.serviceModel>
  <bindings>
   <basicHttpBinding>
    <binding 
        name="xxxSOAPBinding" 
        .... (irrelevant config settings)....
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <security mode="Transport">
      <transport clientCredentialType="Certificate" />
     </security>
    </binding>
   </basicHttpBinding>
  </bindings>
  <client>
   <endpoint address="https://xxxServices_1_0_0"
    binding="basicHttpBinding" bindingConfiguration="xxxSOAPBinding" 
    contract="xxxService" name="xxxService" />
  </client>
 </system.serviceModel>

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

using (var svc = new xxxServiceClient())
{
    svc.ClientCredentials.UserName.UserName = "XXX";
    svc.ClientCredentials.UserName.Password = "XXX";

    svc.ClientCredentials.ClientCertificate
     .SetCertificate(StoreLocation.LocalMachine, StoreName.Root, 
                     X509FindType.FindBySubjectName, "xxx");
...
}

لقد جربت العديد من x509findtypes مختلفة، ومطابقةها للقيم على المركز دون نجاح. هل هناك خطأ ما في شفرتي؟ هل هناك طريقة أخرى يمكنني الاستعلام عن متجر CERT للتحقق من صحة القيم التي أتخلصها؟

جهاز DEV حيث أقوم بتشغيل Visual Studio يحتوي على CERT المستوردة.

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

المحلول

أسئلة سخيفة:

  • هل أنت بالتأكيد تم تثبيت شهادتك على الإطلاق؟
  • هل هذا يشدق على وجه التحديد لهذه آلة التدريج؟

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

مارك

نصائح أخرى

هل أنت متأكد من أن الشهادة قد تم استيرادها إلى متجر الماكينة المحلي، فقد يكون في متجر التيار الرئيسي.

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

أيضا، نظرا لأنك لم تذكر الاستثناء الذي يتم إلقاؤه، فمن الممكن المشكلة هي أن قمت بتعيين بيانات اعتماد اسم المستخدم / كلمة المرور قبل ضبط بيانات اعتماد ClientCertificate، عندما لا يشير ربطك إلى استخدام اسم المستخدم / كلمة المرور. يمكن أن يكون مشكلة هناك؛ انهم حصرية متبادلة، IIRC.

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