دلایل و راه حل های "درخواست لغو شد و کانال امن SSL/TLS ایجاد نشد"
توضیحات: درخواست لغو شد: کانال امن SSL/TLS ایجاد نشد. کانال امن SSL/TLS ایجاد نشد.
پلتفرمهای ساخت: Windows Server 2012، Windows 7 Service Pack 1 (SP1) و Windows Server 2008 R2 SP1
راه حل اول:
کد را قبل از HttpWebRequest تنظیم کنید
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
راه حل 2
- اگر روش بالا کار نمی کند، مشکل در سطح سیستم است.
بهروزرسانی برای فعال کردن TLS 1.1 و TLS 1.2 به عنوان پروتکلهای امنیتی پیشفرض در WinHTTP در ویندوز، این بهروزرسانی از امنیت لایه انتقال (TLS) در Windows Server 2012، Windows 7 Service Pack 1 (SP1) و Windows Server 2008 R2 SP1 1.1 پشتیبانی میکند. و پشتیبانی TLS 1.2، لطفاً به اسناد رسمی مراجعه کنیدhttps://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi
پچ به روز رسانی
مقدار پیش فرض را تنظیم کنید
- TLS 1.1 و 1.2 را در ویندوز 7 در سطح مؤلفه SChannel فعال کنید (یکی از بهروزرسانیهای 2.1 یا 2.2 زیر را انتخاب کنید)
2.1 مایکروسافت رجیستری را نصب و به روز می کند:http://download.microsoft.com/download/0/6/5/0658B1A7-6D2E-474F-BC2C-D69E5B9E9A68/MicrosoftEasyFix51044.msi
2.2 به صورت دستی رجیستری را به روز کنید، کد رجیستری زیر را کپی کرده و به رجیستری وارد کنید. یک txt جدید ایجاد کنید، پسوند txt را به reg (کلید رجیستری) تغییر دهید و وارد کنید (قبل از وارد کردن یک نسخه پشتیبان تهیه کنید)
1 | [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] |
سیستم تایید
- بررسی کنید که آیا سیستم از TLS1.2، TLS1.3 پشتیبانی می کند یا خیر
PowerShell باز می شود:
Net.ServicePointManager::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
راه حل سه
- هیچ یک از دو روش قبلی کار نمی کند شما فقط می توانید از روش نهایی برای ارتقاء سیستم به ویندوز 10 استفاده کنید.
سایر مطالب مرجع
https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/
راه حل ها وجود دارند، اما به نسخه چارچوب بستگی دارند:
دات نت 4.6 و بالاتر. برای پشتیبانی از TLS 1.2 نیازی به انجام کار اضافی ندارید، به طور پیش فرض پشتیبانی می شود.
دات نت 4.5. TLS 1.2 پشتیبانی می شود، اما پروتکل پیش فرض نیست. شما باید انتخاب کنید که از آن استفاده کنید. کد زیر TLS 1.2 را به عنوان پیش فرض تنظیم می کند، قبل از اتصال به یک منبع امن، مطمئن شوید که آن را اجرا کنید:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
دات نت 4.0. TLS 1.2 پشتیبانی نمی شود، اما اگر .NET 4.5 (یا بالاتر) روی سیستم شما نصب شده باشد، شما همچنان می توانید از TLS 1.2 استفاده کنید، حتی اگر چارچوب برنامه شما از TLS 1.2 پشتیبانی نکند. تنها مشکل این است که SecurityProtocolType در NET 4.0 هیچ ورودی برای TLS1.2 ندارد، بنابراین باید از نمایش عددی این مقدار enum استفاده کنیم:
ServicePointManager.SecurityProtocol =(SecurityProtocolType)3072;
دات نت 3.5 یا پایین تر. TLS 1.2 (*) پشتیبانی نمی شود و هیچ راه حلی وجود ندارد. برنامه خود را به آخرین نسخه فریمورک ارتقا دهید.
PS برای سناریوی 3، یک هک رجیستری نیز وجود دارد که 4.5 را مجبور به استفاده از TLS 1.2 به طور پیش فرض بدون نیاز به اجبار برنامه ریزی می کند.
PPS همانطور که Christian Pop مایکروسافت در زیر ذکر می کند، آخرین پچ برای .NET 3.5 موجود است که پشتیبانی از TLS1.2 را فعال می کند.
دیدن:
KB3154518 - مجموعه قابلیت اطمینان HR-1605 - NDP 2.0 SP2 - Win7 SP1/Win 2008 R2 SP1
KB3154519 – مجموعه قابلیت اطمینان HR-1605 – NDP 2.0 SP2 – Win8 RTM/Win 2012 RTM
KB3154520 - مجموعه قابلیت اطمینان HR-1605 - NDP 2.0 SP2 - Win8.1RTM/Win 2012 R2 RTM
KB3156421 -1605 HotFix Rollup through Windows Update for Windows 10.