Người dùng có thể truy xuất chứng chỉ kết nối cho phiên bản SQL Server (tương tự như cách ai đó có thể truy xuất chứng chỉ HTTP) không? Nếu vậy thì thế nào?
Bối cảnh
Nếu máy khách SQL Server yêu cầu mã hóa, chứng chỉ máy chủ phải được xác thực trước khi cho phép kết nối được mã hóa. Các máy chủ phát triển thường được cấu hình với các chứng chỉ tự ký, sẽ không xác nhận theo thiết lập máy khách mặc định.
Để sử dụng chứng chỉ tự ký để mã hóa kết nối, một trong hai:
- Giấy chứng nhận phải được thêm vào cửa hàng địa phương
- khách hàng phải đặt
"TrustServerCertificate=true"
- máy khách không được yêu cầu mã hóa và máy chủ phải được đặt
"ForceEncryption"
thành"yes"
.
Hai tùy chọn sau được mở cho các cuộc tấn công MitM mỗi khi kết nối được thực hiện. Đối với lần thứ 2, một số khách hàng không lưu cài đặt kết nối, do đó, nó phải được đặt lại cho mỗi kết nối mới. Do đó, giải pháp mong muốn nhất là thêm chứng chỉ vào cửa hàng địa phương (ban đầu phải mất thêm một chút công việc, nhưng sau đó là lựa chọn dễ dàng & an toàn nhất). Đối với người dùng trong một miền, chứng chỉ đủ dễ phân phối, nhưng nếu không thì chứng chỉ sẽ cần được cài đặt thủ công trên mỗi máy tính. Quản trị viên có thể cung cấp chứng chỉ cho mỗi người dùng, bằng cách gửi trực tiếp hoặc cung cấp dưới dạng tài nguyên mạng, nhưng đôi khi quản trị viên có thể quá bận hoặc không phản hồi vì các lý do khác để cung cấp chứng chỉ.
Trong trường hợp như vậy, sẽ hữu ích nếu người dùng có thể lấy chứng chỉ từ máy chủ SQL trực tiếp, giống như chứng chỉ có thể được truy xuất từ máy chủ HTTP bằng trình duyệt hoặc openssl s_client
. Điều này vẫn dễ bị tấn công MitM khi lấy chứng chỉ, nhưng cung cấp một cửa sổ hẹp hơn nhiều so với việc tin tưởng chứng chỉ mỗi khi có kết nối mới.