Kích hoạt thư cơ sở dữ liệu TLS 1.2 cho SQL Server 2016


8

Tôi đã bị bối rối bởi vấn đề này trong gần 1 tuần. Hy vọng rằng ai đó trong cộng đồng của chúng tôi đã trải qua vấn đề tương tự và đã tìm thấy một giải pháp.

Vì vậy, đây là vấn đề của tôi:

Theo chính sách công ty của chúng tôi, chúng tôi muốn thư cơ sở dữ liệu có thể gửi email qua cổng 25 khi bật TLS 1.2 và tắt TLS 1.0 & TLS 1.1.

Máy chủ thư của chúng tôi là Exchange Server 2010, các hộp SQL Server 2016 (Phiên bản dành cho nhà phát triển và doanh nghiệp) của chúng tôi có phiên bản OS của Windows Server 2016 Standard.

Phiên bản SQL Server của chúng tôi là:

select @@version
----------------------------------------
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64) 
    Dec 22 2017 11:25:00 
    Copyright (c) Microsoft Corporation
    Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)

Chúng tôi có cấu hình thư DB như được hiển thị ở đây.

nhập mô tả hình ảnh ở đây

Vấn đề là bất cứ khi nào chúng tôi bật SSL

use msdb
exec dbo.sysmail_update_account_sp @account_id=2, @enable_ssl = 1;

Chúng tôi KHÔNG THỂ gửi thư db (bất kể xác thực SMTP của chúng tôi là Xác thực Windows, Xác thực cơ bản hoặc Xác thực ẩn danh). Thông báo lỗi trong nhật ký thư db như sau:

Thông điệp

Thư không thể được gửi đến người nhận vì lỗi máy chủ thư. (Gửi thư bằng tài khoản 2 (2018-07-30T10: 52: 41). Tin nhắn ngoại lệ: Không thể gửi thư đến máy chủ thư. (Không gửi được thư.).)

Nhưng nếu chúng tôi tắt SSL này, không có vấn đề gì với thư db được gửi đi.

Vậy làm thế nào chúng ta có thể kích hoạt SSL và sử dụng TLS 1.2 cho thư db?

Tôi đã kích hoạt TLS 1.2 bằng cách thêm đăng ký như hình bên dưới

nhập mô tả hình ảnh ở đây

Các chi tiết là từ liên kết này (xem phần Câu hỏi thường gặp)

Câu trả lời:


9

TLS1.2 là phiên bản duy nhất của TLS được coi là an toàn ngay bây giờ (tháng 3 năm 2019). Phải mất thời gian và nỗ lực đáng kể để phát hiện ra rằng có 2 cài đặt thiết yếu, bổ sung cần thiết để hoạt động này không được biết đến cũng như không được ghi chép rõ ràng bởi Microsoft hoặc trên web nói chung. Những điều sau đây có thể giúp bạn tiết kiệm rất nhiều thời gian và công sức .

Đây là 2 cài đặt Registry mới khắc phục sự cố cho chúng tôi:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

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

Đây là một tài liệu tham khảo về chủ đề mà cuối cùng chúng tôi đã tìm thấy thông tin này, được chôn xuống một nửa trong chuỗi: /programming/33761919/tls-1-2-in-net-framework-4-0

Dưới đây là nội dung cho một tệp đăng ký thực thi đơn giản mà tôi ghép lại sẽ tạo ra 2 cài đặt mới và các cài đặt đã được hiển thị trên luồng ở trên (nghĩa là điều này tạo ra tất cả các cài đặt Đăng ký cần thiết * ):

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

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

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

Lưu ý 1: SQL cần được khởi động lại để các cài đặt này ảnh hưởng nhưng tốt hơn là khởi động lại Windows vì các cài đặt mới sẽ ảnh hưởng đến .NET 4.x nói chung.

Lưu ý 2: Trong SQL, hộp kiểm SSL phải được đánh dấu trong hồ sơ thư để sử dụng TLS1.2.

* Lưu ý 3: FYI Chúng tôi đã chạy công cụ miễn phí, Crypto V2, với tùy chọn "Thực tiễn tốt nhất" được bật trước khi bắt đầu làm việc này. Chúng tôi đã xác minh các thay đổi của mình sau đó bằng cách sử dụng Crypto phiên bản 3 mới.

Hy vọng rằng điều này sẽ tiết kiệm đáng kể thời gian, nỗ lực và sự thất vọng cho người khác;)


4

Vì dường như không ai có thể trả lời câu hỏi này, tôi đã mở một trường hợp hỗ trợ với Microsoft và vẫn phải mất gần 1 tuần để bộ phận hỗ trợ của MS quay lại với câu trả lời khi anh ta đi qua nhiều nguồn lực nội bộ để có câu trả lời rõ ràng.

Tóm tắt là:

Thư cơ sở dữ liệu SQL Server sử dụng System.Net.Mail để thực hiện công việc, System.Net.Mail có thể gửi thư bằng TLS 1.2 nhưng chỉ khi phiên bản thời gian chạy xây dựng là 4.6 trở lên. Thư db db của SQL Server 2016 được xây dựng cho .Net 3.5, do đó, thư db SQL Server 2016 không hỗ trợ TLS 1.2 như bây giờ.


Xin chào, có bất kỳ cập nhật nào về trường hợp trên không, tôi đang gặp vấn đề chính xác, thật lạ khi nó liên quan đến phiên bản 2 năm tuổi hơn phiên bản gần đây không hỗ trợ giao thức bảo mật! bất kỳ câu trả lời hoặc trợ giúp nào đều được B đánh giá cao
Mohammad Omar

Không, không có bản cập nhật, nhưng hãy hy vọng SQL Server 2019 sẽ khắc phục vấn đề này.
jyao

2

Thật kỳ lạ vì bài viết được liên kết nêu rõ:

Hỗ trợ cho TLS v1.2 có trong .NET Framework phiên bản 3.5 SP1 trên Windows 8.1 và Windows Server 2012 R2

điều này mâu thuẫn với phản hồi bạn nhận được từ bộ phận hỗ trợ của MS. Chỉnh sửa: Tôi đã tìm thấy trong câu hỏi StackOverflow này rằng mặc dù .NET 3.5 không bao gồm hỗ trợ cho TLS 1.2 lúc đầu, nó đã được thêm vào sau bởi MS:

Hỗ trợ cho các phiên bản mặc định của hệ thống TLS có trong .NET Framework 3.5.1 trên Windows 7 SP1 và Server 2008 R2 SP1

Đọc phần Câu hỏi thường gặp Tôi nghĩ rằng vấn đề là bạn đã bỏ lỡ một khóa đăng ký khi bật TLS 1.2. Phần FAQ cho biết:

Các cài đặt đăng ký chính xác như sau:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2] 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
  "DisabledByDefault"=dword:00000000
  "Enabled"=dword:00000001 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
  "DisabledByDefault"=dword:00000000
  "Enabled"=dword:00000001  

Các cài đặt này được yêu cầu cho cả máy chủ và máy khách.

Nhưng trong ảnh chụp màn hình mà bạn cung cấp tôi chỉ thấy "Enabled"=dword:00000001, "DisabledByDefault"=dword:00000000phím bị thiếu.

Ngoài ra nó nói:

TLS 1.1 có được hỗ trợ trên SQL Server 2016 không?

Đúng. SQL Server 2016 và SQL Server 2017 trên các phiên bản Windows có hỗ trợ TLS 1.0 đến TLS 1.2. Bạn phải tắt TLS 1.0 và 1.1 nếu bạn chỉ muốn sử dụng TLS 1.2 cho giao tiếp giữa máy khách và máy chủ.

có thể hiểu là bạn cần phải tắt TLS 1.0 và 1.1 để sử dụng 1.2, nhưng tôi không chắc chắn về điều này.


Bạn đã đưa ra những câu hỏi hay, nhưng tôi không thể trả lời trực tiếp vì hiện tại tôi không có môi trường. Nhưng điều tôi biết là người hỗ trợ MS đã thiết lập nhiều môi trường thử nghiệm và vẫn không thể hiểu được và anh ta phải đưa ra câu hỏi cho nhóm Dev để có câu trả lời cho tôi.
jyao
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.