Trong bài viết này chúng tôi sẽ chỉ cách dùng chứng chỉ SSL/TLS tin cậy để bảo mật kết nối RDP đến máy tính hoặc server Windows trong miền Active Directory. Chúng ta sẽ dùng chứng chỉ SSL tin cậy thay vì chứng chỉ RDP self-signed mặc định (khi dùng chứng chỉ RDP self-signed, người dùng nhận cảnh báo chứng chỉ không tin cậy khi kết nối đến host). Trong ví dụ này, chúng ta sẽ cấu hình template chứng chỉ RDP tùy chỉnh trong Certificate Authority và Group Policy để tự động cấp phát và gán chứng chỉ SSL/TLS cho Remote Desktop Services.
Cảnh Báo Chứng Chỉ Self-Signed Của Kết Nối Remote Desktop (RDP)
Mặc định, để bảo mật phiên RDP Windows tạo chứng chỉ self-signed. Khi kết nối đầu tiên đến host RDP/RDS dùng client mstsc.exe, người dùng thấy cảnh báo sau:
The remote computer could not be authenticated due to problems with its security certificate. It may be unsafe to proceed. Certificate error: The certificate is not from a trusted certifying authority.
Để tiếp tục và thiết lập kết nối RDP, người dùng phải nhấn Yes. Để ngăn cảnh báo chứng chỉ RDP xuất hiện mỗi lần, bạn có thể tích tùy chọn "Don’t ask me again for connections to this computer".

Trong trường hợp này, thumbprint chứng chỉ RDP được lưu trong tham số CertHash của khóa registry với lịch sử kết nối RDP trên client (HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\). Nếu bạn đã ẩn cảnh báo rằng RDP server không thể xác minh, hãy xóa thumbprint chứng chỉ khỏi registry để reset cài đặt.

Dù dùng chứng chỉ self-signed để thiết lập kết nối, phiên RDP của bạn an toàn và traffic được mã hóa.
Tạo Template Chứng Chỉ RDP Trong Certificate Authority (CA)
Hãy thử dùng chứng chỉ SSL/TLS tin cậy do corporate certificate authority cấp để bảo mật kết nối RDP. Dùng chứng chỉ này, người dùng có thể xác thực RDP server khi kết nối. Giả sử corporate Microsoft Certificate Authority đã triển khai trong domain của bạn. Trong trường hợp này, bạn có thể cấu hình tự động cấp phát và gán chứng chỉ cho tất cả máy tính và server Windows trong domain.
Bạn phải tạo loại template chứng chỉ mới cho host RDP/RDS trong CA của bạn:
- Chạy console Certificate Authority và đi đến section Certificate Templates;
- Nhân bản template Computer certificate (Certificate Templates -> Manage -> Computer -> Duplicate);

- Trong tab General, chỉ định tên template chứng chỉ mới – RDPTemplate. Đảm bảo giá trị trong trường Template Name khớp với Template display name;

- Trong tab Compatibility, chỉ định phiên bản client tối thiểu dùng trong domain của bạn (ví dụ, Windows Server 2008 R2 cho CA và Windows 7 cho client). Như vậy, thuật toán mã hóa mạnh hơn sẽ được dùng;
- Sau đó, trong section Application Policy của tab Extensions, hạn chế phạm vi sử dụng chứng chỉ chỉ cho Remote Desktop Authentication (nhập object identifier sau — 1.3.6.1.4.1.311.54.1.2). Nhấn Add -> New, tạo policy mới và chọn nó;

- Trong cài đặt template chứng chỉ (Application Policies Extension), xóa tất cả policy trừ Remote Desktop Authentication;

- Để dùng template chứng chỉ RDP này trên bộ điều khiển miền của bạn, mở tab Security, thêm nhóm Domain Controllers và bật tùy chọn Enroll và Autoenroll cho nó;

- Lưu template chứng chỉ;
- Sau đó trong snap-in Certificate Authority mmc, nhấn folder Certificate Templates và chọn New -> Certificate Template to Issue -> chọn template bạn tạo (RDPTemplate);

Cách Triển Khai Chứng Chỉ SSL/TLS RDP Dùng Group Policy?
Bây giờ bạn cần cấu hình domain GPO để tự động gán chứng chỉ RDP cho máy tính/server theo template đã cấu hình.
Giả định rằng tất cả máy tính domain tin cậy corporate Certificate Authority, tức là root certificate đã được thêm vào Trusted Root Certificate Authorities dùng GPO.
- Mở console Domain Group Policy Management (gpmc.msc), tạo GPO object mới và link nó đến OU chứa server RDP/RDS hoặc máy tính để tự động cấp chứng chỉ TLS bảo mật kết nối RDP;
- Đi đến section GPO sau Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Security. Bật policy Server Authentication Certificate Template . Chỉ định tên template CA bạn tạo trước (RDPTemplate);

- Sau đó trong cùng section GPO, bật policy Require use of specific security layer for remote (RDP) connections và đặt giá trị SSL cho nó;

- Để tự động gia hạn chứng chỉ RDP, đi đến Computer configuration -> Windows settings -> Security Settings -> Public Key Policies section của GPO và bật policy Certificate Services Client – Auto-Enrollment Properties. Tích "Renew expired certificates, update pending certificates and remove revoked certificates" và "Update certificates that use certificate templates";

- Nếu bạn muốn client luôn xác thực chứng chỉ RDP server, bạn phải cấu hình policy Configure Authentication for Client = Warn me if authentication fails (Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Settings -> Remote Desktop Connection Client);
- Nếu cần, mở cổng RDP đến TCP/UDP 3389 dùng policy firewall;
- Sau đó cập nhật cài đặt group policy trên client, chạy console chứng chỉ máy tính (
Certlm.msc) và đảm bảo chứng chỉ Remote Desktop Authentication do CA của bạn cấp đã xuất hiện trong section Personal -> Certificates.
Nếu cài đặt Group Policy mới chưa được áp dụng, dùng công cụ gpresult và bài viết này để chẩn đoán.

Để áp dụng chứng chỉ RDP mới, khởi động lại Remote Desktop Services:
Get-Service TermService -ComputerName mun-dc01| Restart-Service –force –verbose
Sau đó, khi kết nối đến server dùng RDP, bạn không thấy yêu cầu xác nhận chứng chỉ tin cậy (để thấy yêu cầu, kết nối đến server chứng chỉ được cấp cho dùng địa chỉ IP thay vì FQDN). Nhấn View certificate, đi đến tab Details và copy giá trị trong trường Thumbprint.

Trong section Issued Certificates của console Certification Authority, bạn có thể đảm bảo chứng chỉ RDPTemplate đã được cấp cho server/máy tính Windows cụ thể. Cũng kiểm tra giá trị Thumbprint chứng chỉ:

Sau đó so sánh thumbprint này với thumbprint chứng chỉ dùng bởi Remote Desktop Service. Bạn có thể xem giá trị thumbprint chứng chỉ RDS trong registry (HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations, tham số TemplateCertificate) hoặc dùng lệnh PowerShell sau:
Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices|select SSLCertificateSHA1Hash

Sau đó, khi kết nối đến remote desktop của bất kỳ host Windows nào, bạn không thấy cảnh báo chứng chỉ RDP không tin cậy.
Ký File RDP Với Thumbprint Chứng Chỉ TLS Tin Cậy
Nếu bạn không có CA, nhưng không muốn user thấy cảnh báo khi kết nối đến host RDP/RDS, bạn có thể thêm chứng chỉ vào trusted trên máy tính user.
Lấy giá trị thumbprint chứng chỉ RDP như mô tả trên:
Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices|select SSLCertificateSHA1Hash
Dùng fingerprint này để ký file .RDP với công cụ RDPSign.exe:
rdpsign.exe /sha256 25A27B2947022CC11BAFF261234567DEB2ABC21 "C:\ps\mun-dc01.rdp"
Sau đó thêm thumbprint này vào trusted certificates trên máy tính user dùng GPO. Chỉ định thumbprint (cách nhau bởi dấu chấm phẩy) trong policy Specify SHA1 thumbprints of certificates representing trusted .rdp publishers trong Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Settings -> Remote Desktop Connection Client.

Để cấu hình đăng nhập RDP minh bạch không nhập mật khẩu (RDP Single Sign On), cấu hình policy Allow delegation defaults credential và chỉ định tên host RDP/RDS trong nó (xem bài viết này cách làm).