Phiên bản .NET framework 3.5 SP1 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). Bản cập nhật này cho phép sử dụng TLS v1.2 trong phiên .NET Framework 3.5 SP1.
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 KB3154520 đã được thay thế bằng các 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 đây có trong KB3154520. 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 như sau:
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 sổ đăng ký được đề cập trong đoạn văn đầu tiên được đặt và trong ứng dụng, giá trị SslProtocols được đặt là SslProtocols.None thì hành vi mặc định hệ thống được chọn sẽ phụ thuộc vào phiên bản Hệ Điều hành Windows.
Cũng 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 cần đảm bảo trên máy tính không triển khai bản vá này, bạn xử lý các ngoại lệ loại trừ sau đây:-
Nếu hotfix chưa được cài đặt thì 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, thì các API dựa trên SslStream sẽ đưa ra khi 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 with 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 do khóa đăng ký đã đề cập ở phần trước cho ứng dụng cụ thể, bạn có thể thực hiện bằng cách thêm khóa đăng ký sau: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 |