Phiên bản .NET framework 3.5.1 và các phiên bản trước đó không cung cấp hỗ trợ cho các ứng dụng sử dụng Các phiên bản Mặc định Hệ thống Transport Layer Security (TLS) như một giao thức mã hóa. Bản cập nhật này cho phép sử dụng TLS v1.2 trong .NET Framework 3.5.1.
Lưu ýT nội dung này đã được phát hành trên Windows Cập nhật. Để có được nội dung, hãy quét Windows Update để biết các bản cập nhật .NET Framework nhất. Nếu hệ thống của bạn được cập nhật đầy đủ thông qua Windows Update, bạn không cần phải thực hiện thêm hành động.
Giải pháp
Tải xuống thông tin
Hotfix tương ứng với KB3154518 đã được thay thế bằng bản cập nhật mới nhất của .NET Framework, chứa tất cả các bản sửa lỗi trước đó có trong KB3154518. Chúng tôi khuyên bạn nên cài đặt các bản cập nhật mới nhất của .NET Framework. Chúng tôi đã thực hiện các cải tiến sau trong khu vực này:
-
Các khóa đăng ký sau đây có thể được đặt để sử dụng mặc định hệ điều hành cho SSL và TLS thay vì mặc định .NET Framework mã cứng cho một ứng dụng được quản lý chạy trên máy tính.
-
Đối với hệ điều hành 64-bit:[Máy HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727] "SystemDefaultTlsVersions"=dword:00000001 -
Đối với hệ điều hành 32-bit:[Máy HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
Lưu ý Nếu ứng dụng đã đặt ServicePointManager.SecureProtocol trong mã hoặc thông qua cấu hình tệp thành một giá trị cụ thể hoặc sử dụng CÁC API SslStream.AuthenticateAs* để chỉ định một enum SslProtocols cụ thể, hành vi thiết đặt sổ đăng ký sẽ không xảy ra.
-
-
Ngoài ra, chúng tôi đã thêm công thức sslProtocolsExtensions mà bạn có thể sử dụng như một tùy chọn để đặt TLS v1.2, TLS v1.1, cũng như các mặc định hệ điều hành cho thuộc tính ServicePointManager.SecurityProtocol khi nhắm tới .NET framework phiên bản 2.0 SP2. (Hãy xem phần Hướng dẫn Nhà phát triển để biết thông tin về cách sử dụng các tiện ích bổ sung.)
Lưu ý Windows Vista SP2 và Windows Server 2008 SP2 không hỗ trợ các phiên bản giao thức Transport Layer Security (TLS) mới hơn 1.0. Các ứng dụng .NET Framework 2.0 SP2 được quản lý chạy trên Windows Vista SP2 hoặc Windows Server 2008 SP2 không thể sử dụng được TLS 1.2 hoặc TLS 1.1, ngay cả khi các giao thức đó được đặt trong thuộc tính ServicePointManager.SecurityProtocol.
Để biết thêm thông tin về cách tải xuống tệp hỗ trợ của Microsoft, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Tri thức Microsoft:
119591 Cách nhận tệp hỗ trợ của Microsoft từ các dịch vụ trực tuyến mà Microsoft quét tệp này để tìm vi-rút. Microsoft đã sử dụng phần mềm phát hiện vi-rút cập nhật nhất sẵn có tại thời điểm tệp được đăng. Tệp được lưu trên máy chủ được tăng cường bảo mật giúp ngăn chặn mọi thay đổi trái phép đối với tệp.
Hướng dẫn dành cho Nhà phát triển
Định nghĩa của phần mở rộng mới có trong các tệp sau đây:
-
SecurityProtocolTypeExtensions.csnamespace System.Net
{ sử dụng System.Security.Authentication; lớp tĩnh công cộng SecurityProtocolTypeExtensions { const SecurityProtocolType Tls12 = (SecurityProtocolType)SslProtocolsExtensions.Tls12; const SecurityProtocolType Tls11 = (SecurityProtocolType)SslProtocolsExtensions.Tls11; public const SecurityProtocolType SystemDefault = (SecurityProtocolType)0; } } -
SslProtocolsExtensions.csnamespace System.Security.Authentication
{ lớp tĩnh công cộng SslProtocolsExtensions { public const SslProtocols Tls12 = (SslProtocols)0x00000C00; const SslProtocols Tls11 = (SslProtocols)0x00000300; } }
Để bao gồm hỗ trợ cho TLS v1.2, hãy đưa các tệp nguồn vào dự án của bạn, rồi đặt phiên bản giao thức bằng các phương pháp sau đây:
-
Các ứng dụng đang sử dụng API dựa trên ServicePointManager có thể đặt giao thức bằng cách sử dụng:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12; -
Các ứng dụng đang sử dụng quá tải SslStream AuthenticateAsClient(String, X509CertificateCollection, SslProtocols, Boolean) có thể đặt giá trị SslProtocols là SslProtocolsExtensions.Tls12.
Nếu thiết đặt sổ đăng ký được đề cập trong đoạn văn đầu tiên được đặt và giá trị SslProtocols được đặt trong ứng dụng dưới dạng SslProtocols.None, hành vi mặc định của hệ thống được chọn sẽ phụ thuộc vào phiên bản Windows.
Ngoài ra, khi bạn thay đổi mã ứng dụng để kích hoạt hỗ trợ cho TLS v1.2 với .NET Framework 3.5 SP1, bạn nên đảm bảo rằng bạn giải quyết các ngoại lệ sau đây trên máy tính mà bản vá này không được triển khai:-
Nếu hotfix chưa được cài đặt, CÁC API dựa trên ServicePointManager (HTTP, FTP, SMTP) sẽ trả về "System.NotSupportedException: Giao thức bảo mật được yêu cầu không được hỗ trợ" khi ứng dụng gọi ServicePointManager.SecurityProtocol để đặt giá trị mới.
-
Nếu hotfix chưa được cài đặt, các API dựa trên SslStream sẽ đưa ra các ngoại lệ khi họ gọi một trong hai API AuthenticateAs* :
System.ArgumentException: Giá trị được chỉ định không hợp lệ trong liệt tích 'SslProtocolType'.
Tên tham số: sslProtocolType
Lưu ý Chỉ dành cho SslStream, một kết hợp của Tls12, Tls11 với bất kỳ Tls, Ssl3, Ssl2 hiện có nào (ví dụ: Tls12 | Tls11 | Tls) sẽ âm thầm giảm cấp thành các giao thức hiện có (ví dụ: Tls) trên một hệ thống mà không có bản vá lỗi. It will connect to Tls without throwing the exception.
Thông tin Bổ sung
Để bật TLS v1.1 hoặc v1.2 làm mặc định của hệ điều hành, hãy làm theo các hướng dẫn tại https://technet.microsoft.com/en-us/library/dn786418(v=ws.11).aspx#BKMK_SchannelTR_TLS12. Lưu ý TLS v1.1 và v1.2 không sẵn dùng trong Windows Vista hoặc Windows Server 2008. Nếu bạn phải tắt các mặc định của hệ điều hành được đặt bởi khóa đăng ký được đề cập trong mục "Giải pháp" cho các ứng dụng cụ thể, bạn có thể thực hiện điều này bằng cách thêm khóa đăng ký sau đây:HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\v2.0.50727\System.Net.ServicePointManager.SystemDefaultTlsVersions <<Đường dẫn đầy đủ của .exe cho tệp>> DWORD 0 C:\MyApp\MyApp.exe DWORD 0
Để biết thêm thông tin về TLS v1.2, hãy xem Giới thiệu TLS v1.2. Sau khi bạn bật khóa đăng ký SystemDefaultTlsVersions .NET, hành vi khác nhau sẽ xảy ra đối với từng phiên bản Windows, như minh họa trong bảng sau đây.
Windows bản mới nhất |
Máy khách SSL2 |
Máy chủ SSL2 |
Máy khách SSL3 |
Máy chủ SSL3 |
Máy khách TLS 1.0 |
Máy chủ TLS 1.0 |
Máy khách TLS 1.1 |
Máy chủ TLS 1.1 |
Máy khách TLS 1.2 |
Máy chủ TLS 1.2 |
---|---|---|---|---|---|---|---|---|---|---|
Windows Vista SP2 và Windows Server 2008 SP2 |
Tắt |
Bật |
Bật |
Bật |
Bật |
Bật |
Không có |
Không có |
Không có |
Không có |
Windows 7 SP1 và Windows Server 2008 R2 SP1 |
Tắt |
Bật |
Bật |
Bật |
Bật |
Bật |
Tắt |
Tắt |
Tắt |
Tắt |
Windows Server 2012 |
Tắt |
Tắt |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Windows 8.1 và Windows Server 2012 R2 |
Tắt |
Tắt |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Windows 10 |
Tắt |
Tắt |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Windows 10 (1511) |
Tắt |
Tắt |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |
Windows 10 (1607) và Windows Server 2016 |
Không có |
Không có |
Tắt |
Tắt |
Bật |
Bật |
Bật |
Bật |
Bật |
Bật |