كيفية استخدام ملف شهادة PKCS # 12 في صافي WebRequest؟
-
21-08-2019 - |
سؤال
وصدرت لي شهادة PKCS # 12 ليتم استخدامها للوصول إلى خدمة ويب بسيطة يستند إلى XML. عندما كنت تحميل ملف PKCS # 12 في ويندوز (فيستا)، ويمكن الوصول إلى الخدمة باستخدام متصفحي.
ومحاولة للوصول إلى الخدمة من خلال التطبيق، دون تحميل PKCS # 12 إلى مجموعات شهادة OS، وقد كتبت التعليمات البرمجية التالية:
// The certificate i'm using can not be authenticated as it is a development one.
// For now, just ignore it.
static bool myRemoteCertificateValidationCallback(
Object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors
)
{ return true; }
static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback = myRemoteCertificateValidationCallback;
X509Certificate Cert = new X509Certificate(@"certificatefile.p12","medialab");
HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("https://ServiceURL");
Req.ClientCertificates.Add(Cert);
Stream S = Req.GetResponse().GetResponseStream();
TextReader TR = new StreamReader(S);
string Ret = TR.ReadToEnd();
Console.Write(Ret);
}
للأسف فشل هذا رمز وأحصل على System.Net.WebException: تم إحباط الطلب: لا يمكن إنشاء SSL / TLS القناة الآمنة. لقد لاحظت أنه عندما أفعل تحميل PKCS # 12 ملف في ويندوز، رمز يعمل فجأة.
وماذا يجب أن أفعل لجعل القيام مع الملف وحده، وتجنب استخدام مخزن الشهادات ويندوز؟
وشكرا، بوعز
ومزيد من المعلومات: مجرد تطبيق SP1 إلى بلدي Visual Studio ثم الآن أحصل على استثناء آخر: "دعوة إلى SSPI فشلت، انظر الاستثناء الداخلي" مع استثناء الداخلية -> "تم تلقي رسالة غير متوقعة أو منسقة بشكل سيئ".
المحلول
ويكون لديك الشهادة المثبتة في مخزن الشهادات. أسهل طريقة هي استخدام IE واستيراد الشهادة.