Nguyên nhân và giải pháp cho "Yêu cầu bị hủy và không thể tạo kênh bảo mật SSL/TLS"
Mô tả: Yêu cầu bị hủy: Không thể tạo kênh bảo mật SSL/TLS. Không thể tạo kênh bảo mật SSL/TLS.
Xây dựng nền tảng: Windows Server 2012, Windows 7 Service Pack 1 (SP1) và Windows Server 2008 R2 SP1
Giải pháp một:
Đặt mã trước HttpWebRequest
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
Giải pháp 2
- Nếu phương pháp trên không hiệu quả thì đó là sự cố ở cấp độ hệ thống. Cập nhật bản vá hệ thống theo hệ thống bạn hiện đang sử dụng.
Bản cập nhật để kích hoạt TLS 1.1 và TLS 1.2 làm giao thức bảo mật mặc định trong WinHTTP trong Windows, bản cập nhật này cung cấp hỗ trợ cho Transport Layer Security (TLS) trong Windows Server 2012, Windows 7 Service Pack 1 (SP1) và Windows Server 2008 R2 SP1 1.1 và hỗ trợ TLS 1.2, vui lòng tham khảo tài liệu chính thứchttps://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi
cập nhật bản vá
Đặt giá trị mặc định
- Kích hoạt TLS 1.1 và 1.2 trên Windows 7 ở cấp thành phần SChannel (áp dụng một trong các bản cập nhật 2.1 hoặc 2.2 bên dưới)
2.1. Microsoft cài đặt và cập nhật sổ đăng ký:http://download.microsoft.com/download/0/6/5/0658B1A7-6D2E-474F-BC2C-D69E5B9E9A68/MicrosoftEasyFix51044.msi
2.2. Cập nhật sổ đăng ký theo cách thủ công, sao chép mã đăng ký sau và nhập mã vào sổ đăng ký. Tạo một txt mới, thay đổi hậu tố txt thành reg (khóa đăng ký) và nhập (tạo bản sao lưu trước khi nhập)
1 | [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] |
Hệ thống xác minh
- Xác minh xem hệ thống có hỗ trợ TLS1.2, TLS1.3 không
PowerShell mở ra:
Net.ServicePointManager::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
Giải pháp ba
- Cả hai phương pháp trước đều không hiệu quả. Bạn chỉ có thể sử dụng phương pháp cuối cùng để nâng cấp hệ thống lên Windows 10.
Nội dung tham khảo khác
https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/
Các giải pháp tồn tại, nhưng chúng phụ thuộc vào phiên bản khung:
.NET 4.6 trở lên. Bạn không cần thực hiện thêm bất kỳ thao tác nào để hỗ trợ TLS 1.2, nó được hỗ trợ theo mặc định.
.NET 4.5. TLS 1.2 được hỗ trợ nhưng không phải là giao thức mặc định. Bạn cần phải chọn để sử dụng nó. Đoạn mã sau đặt TLS 1.2 làm mặc định, hãy đảm bảo thực thi nó trước khi kết nối với tài nguyên an toàn:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
.NET 4.0. TLS 1.2 không được hỗ trợ, nhưng nếu .NET 4.5 (hoặc cao hơn) được cài đặt trên hệ thống của bạn, bạn vẫn có tùy chọn sử dụng TLS 1.2 ngay cả khi khung ứng dụng của bạn không hỗ trợ TLS 1.2. Vấn đề duy nhất là SecurityProtocolType trong .NET 4.0 không có mục nhập cho TLS1.2, vì vậy chúng ta phải sử dụng cách biểu diễn bằng số của giá trị enum này:
ServicePointManager.SecurityProtocol =(SecurityProtocolType)3072;
.NET 3.5 trở xuống. TLS 1.2(*) không được hỗ trợ và không có cách giải quyết. Nâng cấp ứng dụng của bạn lên phiên bản framework mới nhất.
PS Đối với kịch bản 3, cũng có một vụ hack sổ đăng ký sẽ buộc 4.5 sử dụng TLS 1.2 theo mặc định mà không cần phải ép buộc theo chương trình.
PPS Như Christian Pop của Microsoft đề cập bên dưới, có một bản vá mới nhất dành cho .NET 3.5 cho phép hỗ trợ TLS1.2.
Nhìn thấy:
KB3154518 – Bản tổng hợp độ tin cậy HR-1605 – NDP 2.0 SP2 – Win7 SP1/Win 2008 R2 SP1
KB3154519 – Bản tổng hợp độ tin cậy HR-1605 – NDP 2.0 SP2 – Win8 RTM/Win 2012 RTM
KB3154520 – Bản tổng hợp độ tin cậy HR-1605 – NDP 2.0 SP2 – Win8.1RTM/Win 2012 R2 RTM
KB3156421 -1605 HotFix Rollup through Windows Update for Windows 10.