it-swarm.asia

تم إحباط الطلب: تعذر إنشاء قناة آمنة SSL/TLS

يتعذر علينا الاتصال بخادم HTTPS باستخدام WebRequest بسبب رسالة الخطأ هذه:

The request was aborted: Could not create SSL/TLS secure channel.

نحن نعلم أن الخادم ليس لديه شهادة HTTPS صالحة مع المسار المستخدم ، ولكن لتجاوز هذه المشكلة ، نستخدم الكود التالي الذي أخذناه من منشور StackOverflow آخر:

private void Somewhere() {
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}

private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
   return true;
}

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


يجب أن أذكر أن زميلي وأجري اختبارات قبل بضعة أسابيع وكان يعمل بشكل جيد مع شيء مشابه لما كتبت أعلاه. "الاختلاف الرئيسي" الوحيد الذي اكتشفناه هو أنني أستخدم Windows 7 وكان يستخدم نظام التشغيل Windows XP. هل هذا يغير شيئا؟

285
Simon Dugré

لقد وجدت الإجابة أخيرًا (لم أكن قد لاحظت مصدري ولكنه كان من عملية بحث) ؛

بينما يعمل الرمز في نظام التشغيل Windows XP ، في نظام التشغيل Windows 7 ، يجب عليك إضافة هذا في البداية:

// using System.Net;
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// Use SecurityProtocolType.Ssl3 if needed for compatibility reasons

والآن ، يعمل بشكل مثالي.


الإضافة

كما ذكر روبن الفرنسية ؛ إذا كنت تواجه هذه المشكلة أثناء تكوين Paypal ، يرجى ملاحظة أنها لن تدعم SSL3 اعتبارًا من ديسمبر ، 3 2018. ستحتاج إلى استخدام TLS. إليك صفحة Paypal حول هذا الموضوع.

412
Simon Dugré

الحل لهذا ، في. NET 4.5 هو

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

إذا لم يكن لديك .NET 4.5 ، فاستخدم

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
83
Andrej Z

تأكد من إعداد إعدادات ServicePointManager قبل إنشاء HttpWebRequest ، وإلا فلن يعمل.

يعمل:

        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
               | SecurityProtocolType.Tls11
               | SecurityProtocolType.Tls12
               | SecurityProtocolType.Ssl3;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://google.com/api/")

فشل:

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://google.com/api/")

        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
               | SecurityProtocolType.Tls11
               | SecurityProtocolType.Tls12
               | SecurityProtocolType.Ssl3;
50
hogarth45

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

مثال على كيفية إعداد هذا هو في: http://support.Microsoft.com/kb/901183

تحت الخطوة 2 في مزيد من المعلومات

تحرير: في الإصدارات الأحدث من IIS ، تم دمج هذه الميزة في أداة مدير الشهادات - ويمكن الوصول إليها عن طريق النقر بزر الماوس الأيمن فوق الشهادة وباستخدام خيار إدارة المفاتيح الخاصة. مزيد من التفاصيل هنا: https://serverfault.com/questions/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791

30
Avitus

الخطأ عام وهناك العديد من الأسباب التي قد تؤدي إلى فشل مفاوضات SSL/TLS. الأكثر شيوعًا هو شهادة خادم غير صالحة أو منتهية الصلاحية ، وقد اعتنت بذلك عن طريق توفير ربط التحقق من صحة شهادة الخادم الخاصة بك ، ولكن ليس بالضرورة هو السبب الوحيد. قد يتطلب الخادم مصادقة متبادلة ، وقد يتم تهيئته بمجموعات من الأصفار غير المدعومة من قِبل عميلك ، وقد يكون هناك وقت كبير للغاية لتنجح المصافحة والعديد من الأسباب.

أفضل حل هو استخدام مجموعة أدوات استكشاف أخطاء SChannel. SChannel هو موفر SSPI المسؤول عن SSL و TLS وسيستخدمه عميلك للمصافحة. ألقِ نظرة على أدوات وإعدادات TLS/SSL .

راجع أيضًا كيفية تمكين تسجيل أحداث Schannel .

25
Remus Rusanu

واجهت هذه المشكلة محاولة الوصول إلى https://ct.mob0.com/Styles/Fun.png ، وهي صورة تم توزيعها بواسطة CloudFlare على شبكة CDN التي تدعم الأشياء المجنونة مثل SPDY وغريبة إعادة توجيه SSL.

بدلاً من تحديد Ssl3 كما في إجابة Simons ، تمكنت من إصلاحها عن طريق الانتقال إلى Tls12 مثل هذا:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
new WebClient().DownloadData("https://ct.mob0.com/Styles/Fun.png");
24
Bryan Legend

بعد عدة ساعات طويلة مع هذه المشكلة نفسها ، وجدت أن حساب ASP.NET الذي كانت تعمل عليه خدمة العميل لم يكن لديه حق الوصول إلى الشهادة. لقد أصلحته من خلال الدخول إلى IIS تجمع التطبيقات الذي يعمل عليه تطبيق الويب ، والذهاب إلى الإعدادات المتقدمة ، وتغيير الهوية إلى حساب LocalSystem من NetworkService.

الحل الأفضل هو الحصول على شهادة تعمل مع حساب NetworkService الافتراضي ، لكن هذا يعمل للاختبار الوظيفي السريع.

17
Nick Gotch

شيء لم يكن الجواب الأصلي. أضفت المزيد من الكود لجعله دليلا على الرصاصة.

ServicePointManager.Expect100Continue = true;
        ServicePointManager.DefaultConnectionLimit = 9999;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;
14
SpoiledTechie.com

الاحتمال الآخر هو استيراد شهادة غير صحيحة في المربع. تأكد من تحديد خانة الاختيار محاطة. في البداية لم أفعل ذلك ، لذلك كانت الشفرة إما مهلة أو رمي نفس الاستثناء حيث تعذر تحديد موقع المفتاح الخاص.

certificate importation dialog

13
Sherlock

يمكن أن يحدث استثناء "الطلب تم إحباطه: تعذر إنشاء قناة آمنة SSL/TLS" إذا كان الخادم يُرجع HTTP 401 غير مصرح به / استجابة لطلب HTTP.

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

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

System.Net Information: 0 : [9840] Connection#62912200 - Received status line: Version=1.1, StatusCode=401, StatusDescription=Unauthorized.

في حالتي ، كنت أخفق في تعيين ملف تعريف ارتباط معين كان الخادم يتوقعه ، مما أدى إلى استجابة الخادم للطلب مع الخطأ 401 ، والذي أدى بدوره إلى استثناء "تعذر إنشاء قناة آمنة SSL/TLS".

9
Jon Schneider

هذا واحد يعمل بالنسبة لي في MVC webclient

    public string DownloadSite(string RefinedLink)
    {
        try
        {
            Uri address = new Uri(RefinedLink);

            ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

            System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

            using (WebClient webClient = new WebClient())
            {
                var stream = webClient.OpenRead(address);
                using (StreamReader sr = new StreamReader(stream))
                {
                    var page = sr.ReadToEnd();

                    return page;
                }
            }

        }
        catch (Exception e)
        {
            log.Error("DownloadSite - error Lin = " + RefinedLink, e);
            return null;
        }
    }
9
Arun Prasad E S

كان جذر هذا الاستثناء في حالتي هو أنه في مرحلة ما من التعليمات البرمجية تم استدعاء التالي:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

هذا سيء حقا. لا يقتصر الأمر على توجيه .NET لاستخدام بروتوكول غير آمن ، ولكن هذا يؤثر على كل طلب WebClient جديد (وما شابه) يتم تقديمه فيما بعد داخل نطاقك. (لاحظ أن طلبات الويب الواردة لا تتأثر في تطبيق ASP.NET الخاص بك ، لكن طلبات WebClient الجديدة ، مثل التحدث إلى خدمة ويب خارجية).

في حالتي ، لم تكن هناك حاجة فعلية ، لذلك يمكنني فقط حذف العبارة وبدأت جميع طلبات الويب الأخرى الخاصة بي تعمل بشكل جيد مرة أخرى. بناءً على قراءتي في مكان آخر ، تعلمت بعض الأشياء:

  • هذا إعداد عمومي في نطاقك ، وإذا كان لديك نشاط متزامن ، فلا يمكنك تعيينه بشكل موثوق على قيمة واحدة ، ثم قم بإجراء ، ثم أعده. قد يحدث إجراء آخر خلال تلك النافذة الصغيرة ويتأثر.
  • الإعداد الصحيح هو ترك الأمر افتراضيًا. يتيح ذلك لـ .NET الاستمرار في استخدام كل ما هو القيمة الافتراضية الأكثر أمانًا مع مرور الوقت وترقية الأطر. إعداده إلى TLS12 (وهو الأكثر أمانًا حتى كتابة هذه السطور) سيعمل الآن ولكن في غضون 5 سنوات قد يبدأ في التسبب في مشاكل غامضة.
  • إذا كنت بحاجة حقًا إلى تحديد قيمة ، فيجب أن تفكر في القيام بذلك في تطبيق متخصص منفصل أو مجال وتجد طريقة للتحدث بينها وبين حمام السباحة الرئيسي. نظرًا لأنها قيمة عالمية واحدة ، فإن محاولة إدارتها داخل تجمع تطبيقات مزدحم لن يؤدي إلا إلى حدوث مشكلات. توفر هذه الإجابة: https://stackoverflow.com/a/26754917/7656 حلاً ممكنًا عن طريق وكيل مخصص. (لاحظ أنني لم تنفذها شخصيًا.)
8
Tyler Forsythe

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

إذا قمت بتعيين قيمة WebRequest.Timeout إلى 0 ، فهذا هو الاستثناء. يوجد أدناه الرمز الذي أمتلكه ... (باستثناء بدلاً من رمز 0 الثابت للقيمة المهلة ، كان لدي معلمة تم تعيينها عن غير قصد على 0).

WebRequest webRequest = WebRequest.Create(@"https://myservice/path");
webRequest.ContentType = "text/html";
webRequest.Method = "POST";
string body = "...";
byte[] bytes = Encoding.ASCII.GetBytes(body);
webRequest.ContentLength = bytes.Length;
var os = webRequest.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();
webRequest.Timeout = 0; //setting the timeout to 0 causes the request to fail
WebResponse webResponse = webRequest.GetResponse(); //Exception thrown here ...
7
TCC

في حالة كون العميل عبارة عن جهاز يعمل بنظام windows ، قد يكون السبب المحتمل هو عدم تنشيط بروتوكول tls أو ssl المطلوب بواسطة الخدمة.

يمكن ضبط هذا في:

لوحة التحكم -> الشبكة والإنترنت -> خيارات الإنترنت -> خيارات متقدمة

انتقل الإعدادات لأسفل إلى "الأمان" واختر بين

  • استخدم SSL 2.0
  • استخدم SSL 3.0
  • استخدم TLS 1.0
  • استخدم TLS 1.1
  • استخدم TLS 1.2

 enter image description here

6
cnom

سبب آخر محتمل للخطأ The request was aborted: Could not create SSL/TLS secure channel هو عدم التطابق بين قيم cipher_suites المكونة لجهاز الكمبيوتر العميل الخاص بك ، والقيم التي تم تكوين الخادم على أنها مستعدة وقادرة على قبولها . في هذه الحالة ، عندما يرسل عميلك قائمة بقيم cipher_suites التي يمكنه قبولها في رسالة "Client Hello" الخاصة بمصادقة SSL الأولية ، يرى الخادم أن أيًا من القيم المقدمة غير مقبولة ، وقد يقوم بإرجاع "تنبيه" "استجابة بدلاً من المتابعة إلى الخطوة" Server Hello "من مصافحة SSL.

لاستكشاف هذا الاحتمال ، يمكنك تنزيل Microsoft Message Analyzer ، واستخدامه لتشغيل تتبع على تفاوض SSL الذي يحدث عندما تحاول وفشل في إنشاء اتصال HTTPS بالخادم (في تطبيق C # الخاص بك).

إذا كنت قادرًا على إنشاء اتصال HTTPS ناجح من بيئة أخرى (مثل Windows XP الجهاز الذي ذكرته - أو ربما عن طريق ضرب عنوان URL HTTPS في مستعرض بخلاف Microsoft لا يستخدم نظام التشغيل تقوم إعدادات مجموعة التشفير ، مثل Chrome أو Firefox) ، بتشغيل تتبع "محلل الرسائل" آخر في تلك البيئة لالتقاط ما يحدث عندما تنجح مفاوضات SSL.

نأمل أن تشاهد بعض الاختلاف بين رسالتين "عميل مرحبا" ، والتي ستتيح لك تحديد بالضبط ماذا عن فشل مفاوضات طبقة المقابس الآمنة التي تسبب فشلها. بعد ذلك ، يجب أن تكون قادرًا على إجراء تغييرات في التكوين على Windows تتيح له النجاح. IISCrypto أداة رائعة لاستخدامها لهذا (حتى لأجهزة الكمبيوتر العميلة ، على الرغم من اسم "IIS").

تحكم مفاتيح التسجيل Windows التالية القيم cipher_suites التي سيستخدمها جهاز الكمبيوتر الخاص بك:

  • HKLM\SOFTWARE\سياسات\مايكروسوفت\الترميز\تكوين\SSL\00010002
  • HKLM\SYSTEM\نقرا\مراقبة\تشفير\تكوين\المحلية\SSL\00010002

فيما يلي مجموعة كاملة من المعلومات حول كيفية بحثي عن مثيل لهذه المشكلة المتنوعة من Could not create SSL/TLS secure channel وحلها: http://blog.jonschneider.com/2016 //08/fix-ssl-handshaking-error-in-windows.html

6
Jon Schneider

لقد كافحت مع هذه المشكلة طوال اليوم.

عندما أنشأت مشروعًا جديدًا باستخدام .NET 4.5 أصبحت أخيرًا تعمل.

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

غريب لا توجد رسالة خطأ أخرى ولكن "تم إحباط الطلب: تعذر إنشاء قناة آمنة SSL/TLS." جاء لهذا الخطأ

6
aghost

إذا كنت تقوم بتشغيل التعليمات البرمجية من Visual Studio ، فحاول تشغيل Visual Studio كمسؤول. إصلاح المشكلة بالنسبة لي.

4
bplus

واجهت هذه المشكلة لأن بلدي web.config كان:

<httpRuntime targetFramework="4.5.2" />

و لا:

<httpRuntime targetFramework="4.6.1" />
4
Terje Solem

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

  1. الوسائط المتعددة
  2. شهادات
  3. توسيع لتشمل الشخصية
  4. حدد سيرت
  5. انقر بزر الماوس الأيمن
  6. كل المهام
  7. إدارة المفاتيح الخاصة
  8. إضافة
3
Dinesh Rajan

كنت أواجه نفس المشكلة ووجدت هذه الإجابة عملت بشكل صحيح بالنسبة لي. المفتاح هو 3072. هذا الرابط يوفر تفاصيل حول الإصلاح '3072'.

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

XmlReader r = XmlReader.Create(url);
SyndicationFeed albums = SyndicationFeed.Load(r);

في حالتي ، يتطلب موجزان الإصلاح:

https://www.fbi.gov/feeds/fbi-in-the-news/atom.xml
https://www.wired.com/feed/category/gear/latest/rss
3
joeydood

System.Net.WebException: تم إحباط الطلب: تعذر إنشاء قناة آمنة SSL/TLS.

في حالتنا ، نحن حيث نستخدم بائع برامج لذلك لم نتمكن من الوصول لتعديل رمز .NET. يبدو أن .NET 4 لن يستخدم TLS v 1.2 ما لم يكن هناك تغيير.

كان الإصلاح بالنسبة لنا إضافة مفتاح SchUseStrongCrypto إلى السجل. يمكنك نسخ/لصق الكود أدناه في ملف نصي بملحق .reg وتنفيذه. كان بمثابة "التصحيح" لدينا لهذه المشكلة.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
3
capdragon

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

كيفية منح ASP.NET حق الوصول إلى مفتاح خاص في شهادة في مخزن الشهادات؟

2
Danny Cullen

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

https://support.Microsoft.com/en-us/help/4458166/applications-that-rely-on-tls-1-2-strong-encryption-experience-connect

بشكل أساسي ، يفترض MS أنك تريد تشفيرًا أضعف ، ولكن نظام التشغيل مصحح للسماح TLS 1.2 فقط ، لذلك تتلقى اللعين "تم إلغاء الطلب: تعذر إنشاء قناة آمنة SSL/TLS."

هناك ثلاثة إصلاحات.

1) قم بتصحيح نظام التشغيل مع التحديث المناسب: http://www.catalog.update.Microsoft.com/Search.aspx؟q=kb4458166

2) إضافة إعداد إلى ملف app.config/web.config الخاص بك.

3) إضافة إعداد التسجيل الذي سبق ذكره في إجابة أخرى.

كل هذه مذكورة في مقالة قاعدة المعارف التي نشرتها.

2
Michael Silver

جرب هذا:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
2
Muhammad Awais

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

1
Mark Reid

يمكنك محاولة تثبيت شهادة تجريبية (يقدمها بعض موفري خدمة تصميم المواقع (SSL) مجانًا لمدة شهر) للتأكد من أن المشكلة تتعلق بصلاحية الشهادة أم لا.

1
twk

بالإضافة إلى الإجابات الواردة أعلاه ، تأكد من استيراد شهادة CER ، وليس ملف PFX إلى متجر الماكينات المحلي لديك. خطأ شائع عندما يكون لديك كلا الملفين.

1
Carl Prothman

طالما كان هذا رابطًا "حيًا" نسبيًا اعتقدت أنني سأضيف خيارًا جديدًا. هذا الاحتمال هو أن الخدمة لم تعد تدعم SSL 3.0 بسبب مشكلة هجوم Poodle. تحقق من بيان جوجل على هذا. لقد واجهت هذه المشكلة مع العديد من خدمات الويب في آن واحد وأدركت أن هناك شيئًا ما يجب أن يحدث. لقد تحولت إلى TLS 1.2 وكل شيء يعمل مرة أخرى.

http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html

1
Marcus Cole

الإجابة التي حصلت على أعلى الأصوات ربما ستكون كافية لمعظم الأشخاص. ومع ذلك ، في بعض الحالات ، يمكنك الاستمرار في الحصول على خطأ "تعذر إنشاء قناة آمنة SSL/TLS" حتى بعد فرض TLS 1.2. إذا كان الأمر كذلك ، فقد ترغب في الرجوع إلى هذه المقالة المفيدة للحصول على خطوات إضافية لاستكشاف الأخطاء وإصلاحها. لتلخيص: بغض النظر عن مشكلة إصدار TLS/SSL ، يجب أن يتفق العميل والخادم على "مجموعة التشفير". أثناء مرحلة "المصافحة" الخاصة باتصال طبقة مآخذ التوصيل الآمنة (SSL) ، سيقوم العميل بإدراج مجموعات التشفير المدعومة للخادم للتحقق من قائمتها الخاصة. ولكن في بعض أجهزة Windows ، ربما تم تعطيل بعض مجموعات التشفير الشائعة (على ما يبدو بسبب محاولات حسنة النية للحد من سطح الهجوم) ، مما يقلل من احتمال موافقة العميل والخادم على مجموعة التشفير. إذا لم يتمكنوا من الموافقة ، فقد ترى "رمز التنبيه القاتل 40" في عارض الأحداث و "تعذر إنشاء قناة آمنة SSL/TLS" في برنامج .NET.

تشرح المقالة المذكورة أعلاه كيفية سرد كافة مجموعات التشفير التي يحتمل أن تكون مدعومة في الجهاز وتمكين مجموعات تشفير إضافية من خلال سجل Windows. للمساعدة في التحقق من مجموعات التشفير التي يتم تمكينها على العميل ، حاول زيارة صفحة التشخيص هذه في MSIE. (قد يؤدي استخدام تتبع System.Net إلى الحصول على نتائج أكثر تحديدًا.) للتحقق من مجموعات التشفير التي يدعمها الخادم ، جرب هذه الأداة عبر الإنترنت (على افتراض أن الخادم يمكن الوصول إليه عبر الإنترنت). يجب أن تمر بدون ذكر ذلك يجب إجراء تعديلات السجل بحذر ، لا سيما عندما يتعلق الأمر بالشبكات. (هل جهازك عبارة عن جهاز VM مستضاف عن بُعد؟ إذا كنت ستقطع الاتصال بالشبكة ، فهل سيكون VM متاحًا على الإطلاق؟)

في حالة شركتي ، قمنا بتمكين العديد من مجموعات "ECDHE_ECDSA" الإضافية عبر تعديل السجل ، لحل مشكلة فورية والحماية من المشكلات المستقبلية. ولكن إذا لم تتمكن من (أو لن) تحرير السجل ، فسوف تتبادر إلى الذهن العديد من الحلول (وليس بالضرورة الجميلة). على سبيل المثال: يمكن لبرنامج .NET تفويض حركة مرور طبقة المقابس الآمنة الخاصة به إلى برنامج Python منفصل (والذي قد يعمل بنفسه ، لنفس السبب الذي قد تنجح فيه طلبات Chrome عندما تفشل طلبات MSIE على جهاز متأثر).

1
APW

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

1
jayasurya_j

في حالتي ، واجهت هذه المشكلة عندما حاولت خدمة Windows الاتصال بخدمة ويب. أبحث في أحداث Windows أخيراً وجدت رمز خطأ.

يتم رفع معرّف الحدث 36888 (Schannel):

The following fatal alert was generated: 40. The internal error state is 808.

أخيرًا ، كان مرتبطًا بـ Windows Hotfix. في حالتي: KB3172605 و KB3177186

الحل المقترح في منتدى إم وير كان إضافة إدخال تسجيل في ويندوز. بعد إضافة السجل التالي جميع يعمل بشكل جيد.

[HKEY_LOCAL_MACHINE\SYSTEM\نقرا\مراقبة\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\ديفي هيلمان]

"ClientMinKeyBitLength" = الكلمة المزدوجة: 00000200

يبدو أنه مرتبط بقيمة مفقودة في مصافحة https في جانب العميل.

قائمة ويندوز HotFix الخاص بك:

wmic qfe list

الحل الموضوع:

https://communities.vmware.com/message/2604912#2604912

آمل أن يساعد.

1
Hernán Dario Velásquez García

يستخدم .NET ServicePointManager.SecurityProtocol الافتراضي SSLv3 و TLS. إذا كنت تقوم بالوصول إلى خادم Apache ، فهناك متغير تكوين يسمى SSLProtocol والذي يتم تعيينه افتراضيًا على TLSv1.2. يمكنك إما تعيين ServicePointManager.SecurityProtocol لاستخدام البروتوكول المناسب الذي يدعمه خادم الويب الخاص بك أو تغيير تكوين Apache للسماح لجميع البروتوكولات مثل هذا SSLProtocolall.

0
Paul

لقد واجهت نفس المشكلة في الآونة الأخيرة. بيئتي تعمل تحت. NET 4.6.1 مع VB.NET. هكذا أصلحتها:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf util.ValidateServerCertificate)

والدالة util.ValidateServerCertificate هي:

Public Function ValidateServerCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
    Return True
End Function
0
cavalcanteg

إذا كنت لا ترغب في ذلك ، أو لا يمكنك بسهولة ، أو لا يمكنك تصحيح التعليمات البرمجية الخاصة بك بسرعة ، بدلاً من ذلك ، يمكنك فرض استخدام TLS 1.2 بواسطة رمز .NET الخاص بك في الإطار.

هذا ليس تطبيقي ، لكنه ساعد إصلاح تطبيق .NET 4.5 الأقدم (يعمل على Server 2008r2) على العمل مرة أخرى مع Paypal Payflow Gateway. يجب أن يكونوا قد بدأوا في فرض الاتصالات عبر TLS 1.2 على عمليات الاسترجاعات الخاصة ببوابة الدفع بين 6/25/18 و 7/8/18.

التفاصيل: https://github.com/TheLevelUp/pos-tls-patcher Download: https://github.com/TheLevelUp/pos-tls-patcher/releases

0
cvocvo

لا شيء من الإجابات عملت بالنسبة لي.

هذا هو ما نجح:

بدلاً من تهيئة X509Certifiacte2 مثل هذا:

   var certificate = new X509Certificate2(bytes, pass);

أنا فعلت هذا مثل هذا:

   var certificate = new X509Certificate2(bytes, pass, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

لاحظ X509KeyStorageFlags.Exportable !!

لم أغير بقية الكود (WebRequest):

// I'm not even sure the first two lines are necessary:
ServicePointManager.Expect100Continue = true; 
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

request = (HttpWebRequest)WebRequest.Create(string.Format("https://{0}.sii.cl/cvc_cgi/dte/of_solicita_folios", server));
request.Method = "GET";
request.Referer = string.Format("https://Hercules.sii.cl/cgi_AUT2000/autInicio.cgi?referencia=https://{0}.sii.cl/cvc_cgi/dte/of_solicita_folios", servidor);
request.UserAgent = "Mozilla/4.0";
request.ClientCertificates.Add(certificate);
request.CookieContainer = new CookieContainer();

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    // etc...
}

في الحقيقة لست متأكدًا من أن أول سطرين ضروريان ...

0
sports

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

0
Jon