Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cài đặt chứng chỉ TLS/SSL Let's Encrypt miễn phí trên IIS Web Server / RDS

Hướng dẫn cài đặt và gán chứng chỉ TLS/SSL Let's Encrypt miễn phí cho website trên IIS web server chạy trên Windows Server 2019/2016/2012 R2.

Nội dung chính

  • Let's Encrypt và ACME Client cho Windows
  • WACS Client cài đặt chứng chỉ TLS Let's Encrypt trên IIS Windows Server
  • Chuyển hướng HTTP sang HTTPS bằng IIS URL Rewrite
  • Sử dụng chứng chỉ Let's Encrypt với RDS Gateway & Web Access

Let's Encrypt và ACME Client cho Windows

Chứng chỉ TLS/SSL của website bảo vệ dữ liệu người dùng truyền qua mạng công cộng khỏi tấn công man-in-the-middle (MITM) và đảm bảo tính toàn vẹn dữ liệu. Trung tâm chứng thực phi lợi nhuận Let's Encrypt cho phép tự động cấp chứng chỉ TLS X.509 miễn phí cho mã hóa HTTPS qua API. Chỉ cấp chứng chỉ xác thực domain, hết hạn sau 90 ngày (giới hạn 50 chứng chỉ cho một domain mỗi tuần). Nhưng bạn có thể tự động gia hạn chứng chỉ SSL cho website bằng lịch đơn giản.

API Let's Encrypt để tự động cấp chứng chỉ gọi là Automated Certificate Management Environment (ACME) API. Có 3 triển khai ACME API client phổ biến cho Windows:

  1. Windows ACME Simple (WACS) — công cụ command prompt tương tác cấp chứng chỉ SSL và gán vào site cụ thể trên IIS web server;
  2. Module PowerShell ACMESharp — thư viện PowerShell với các cmdlet tương tác máy chủ Let's Encrypt qua ACME API;
  3. Certify — công cụ đồ họa Windows quản lý chứng chỉ SSL tương tác qua ACME API.

WACS Client cài đặt chứng chỉ TLS Let's Encrypt trên IIS Windows Server

Cách dễ nhất lấy chứng chỉ SSL từ Let's Encrypt là dùng công cụ console Windows ACME Simple (WACS) (trước đây gọi LetsEncrypt-Win-Simple). Wizard đơn giản cho phép chọn website chạy trên IIS, tự động cấp và gán chứng chỉ SSL.

Giả sử bạn có website IIS chạy trên Windows Server 2016. Nhiệm vụ: chuyển website sang chế độ HTTPS bằng chứng chỉ SSL miễn phí từ Let's Encrypt.

Tải bản phát hành mới nhất WACS client từ GitHub https://github.com/PKISharp/win-acme/releases (ví dụ version v2.0.10 — file win-acme.v2.0.10.444.zip).

Giải nén zip vào thư mục trên server cài IIS: c:\inetpub\letsencrypt

Yêu cầu: Cài .NET Framework 4.7.2 hoặc cao hơn để dùng Win-Acme (Kiểm tra phiên bản .NET Framework đã cài?).

Mở command prompt quyền admin, vào thư mục c:\inetpub\letsencrypt và chạy wacs.exe. Wizard tạo và gán chứng chỉ Let's Encrypt cho site IIS sẽ khởi chạy. Để tạo chứng chỉ mới nhanh, chọn N: — Create new certificates (simple for IIS).

Tiếp theo chọn loại chứng chỉ. Ví dụ không cần chứng chỉ có alias (nhiều SAN — Subject Alternative Name), chọn mục 1. Single binding of an IIS site. Nếu cần Wildcard certificate, chọn tùy chọn 3.

Tiện ích hiển thị danh sách website chạy trên IIS và nhắc chọn site cấp chứng chỉ.

Nhập địa chỉ email nhận thông báo về vấn đề gia hạn chứng chỉ và tin nhắn quan trọng khác (có thể nhập nhiều email cách nhau bằng dấu phẩy). Đồng ý điều khoản sử dụng và Windows ACME Simple sẽ kết nối máy chủ Let's Encrypt tự động tạo chứng chỉ SSL mới cho website.

Quá trình tạo và cài đặt chứng chỉ SSL Let's Encrypt cho IIS hoàn toàn tự động.

Mặc định, xác thực domain thực hiện ở chế độ http-01 validation (SelfHosting). Cần bản ghi DNS domain trỏ về web server. Khi chạy WACS chế độ manual (full options), có thể chọn loại validation — 4 [http-01] Create temporary application in IIS (recommended). Lúc này, một ứng dụng nhỏ sẽ được tạo trên IIS web server để máy chủ Let's Encrypt thực hiện xác thực domain.

Lưu ý. Trong quá trình xác thực TLS/HTTP, site phải truy cập được từ Internet bằng tên DNS đầy đủ qua giao thức HTTP (80/TCP) và HTTPS (443/TCP).

Công cụ WACS lưu private key chứng chỉ (*.pem), chứng chỉ và các file khác tại C:\Users\%username%\AppData\Roaming\letsencrypt-win-simple. Sau đó cài đặt chứng chỉ SSL Let's Encrypt tạo ngầm và gán vào site IIS. Nếu site đã có chứng chỉ SSL (ví dụ self-signed cert), sẽ bị thay thế bằng chứng chỉ mới.

Trong IIS Manager, mở cài đặt Site Binding cho website và xác minh dùng chứng chỉ do Let's Encrypt Authority X3 cấp.

Chứng chỉ này sẽ xuất hiện là trusted trên máy tính nếu bạn đã cập nhật Windows Trusted Root Certification Authorities.

Tìm chứng chỉ Let's Encrypt IIS trong certificate store máy tính tại Web Hosting → Certificates.

Windows ACME Simple tạo job mới trong Windows Task Scheduler (win-acme-renew (acme-v02.api.letsencrypt.org)) để tự động gia hạn chứng chỉ. Task chạy hàng ngày, gia hạn chứng chỉ sau 60 ngày. Task chạy lệnh:

C:\inetpub\letsencrypt\wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org"

Bạn có thể dùng cùng lệnh để gia hạn thủ công chứng chỉ Let's Encrypt.

Chuyển hướng HTTP sang HTTPS bằng IIS URL Rewrite

Để chuyển hướng tất cả traffic HTTP đến URL website HTTPS, cài Microsoft URL Rewrite Module (https://www.iis.net/downloads/microsoft/url-rewrite), đảm bảo tùy chọn Require SSL bị tắt trong cài đặt site. Cấu hình redirect trong web.config với rewrite rules:

<system.webServer> <rewrite> <rules> <rule name="HTTP to HTTPS Redirect" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer>

Cũng có thể cấu hình redirect traffic dùng extension URL Rewrite qua GUI IIS Manager. Chọn Sites → yoursitename → URL Rewrite.

Tạo rule mới Add Rule → Blank rule. Đặt tên rule và thay đổi tham số:

  • Requested URL: Matches the Pattern
  • Using: Regular Expressions
  • Pattern: (.*)

Phần Conditions, đổi Logical Grouping: Match All → Add. Cài đặt:

  • Condition input: {HTTPS}
  • Check if input string: Matches the Pattern
  • Pattern: ^OFF$

Khối Action chọn:

  • Action Type: Redirect
  • Redirect URL: https://{HTTP_HOST}/{R:1}
  • Redirect type: Permanent (301)

Mở trình duyệt truy cập site bằng địa chỉ HTTP; sẽ tự động redirect sang URL HTTPS.

Sử dụng chứng chỉ Let's Encrypt với RDS Gateway & Web Access

Nếu dùng RDS Gateway hoặc RDS Web Access kết nối user ngoài vào mạng nội bộ, có thể dùng chứng chỉ SSL trusted từ Let's Encrypt thay vì self-signed certificate. Xem cách cài đặt đúng chứng chỉ Let's Encrypt bảo mật Remote Desktop Services trên Windows Server.

Nếu role RDSH cũng cài trên Remote Desktop Gateway server, phải ngăn user non-admin truy cập thư mục chứa file WACS (ví dụ c:\inetpub\letsencrypt) và chứng chỉ/key Let's Encrypt (C:\ProgramData\win-acme).

Chạy wacs.exe trên RD Gateway server như mô tả. Chọn site IIS mong muốn (thường là Default Web Site). Let's Encrypt sẽ cấp chứng chỉ mới gán vào website IIS, và task gia hạn tự động xuất hiện trong Task Scheduler.

Có thể export thủ công chứng chỉ này và gán vào dịch vụ RDS cần thiết qua SSL binding. Nhưng phải làm thủ công mỗi 60 ngày khi chứng chỉ Let's Encrypt gia hạn.

Dùng script PowerShell tự động gán chứng chỉ SSL cho RDS Gateway sau khi cập nhật chứng chỉ Let's Encrypt.

Có sẵn script PowerShell trong project win-acme — ImportRDGateway.ps1 (https://github.com/PKISharp/win-acme/tree/master/dist/Scripts), cho phép cài chứng chỉ SSL cho Remote Desktop Services. Nhược điểm chính: phải chỉ định thủ công thumbprint chứng chỉ mới: ImportRDGateway.ps1 <certThumbprint>

Để tự động lấy thumbprint chứng chỉ từ site IIS chỉ định, dùng script sửa đổi ImportRDGateway_Cert_From_IIS.ps1 (dựa trên ImportRDGateway.ps1).

Chạy script thủ công: powershell -File ImportRDGateway_Cert_From_IIS.ps1

Nếu RDS Gateway chạy trên IIS "Default Web Site" index 0, dùng script không cần sửa. Để lấy site ID trên IIS, mở PowerShell: Import-Module WebAdministration
Get-ChildItem IIS:Sites|ft -AutoSize
. Cột ID hiển thị index site, trừ đi 1. Index kết quả thay thế 0 ở dòng 27 script PowerShell:

$NewCertThumbprint = (Get-ChildItem IIS:SSLBindings)[0].Thumbprint

Mở task scheduler win-acme-renew, tab Actions thêm task mới chạy script ImportRDGateway_Cert_From_IIS.ps1 sau khi cập nhật SSL certificate.

Để không đổi execution policy PowerShell, chạy script lệnh: PowerShell.exe -ExecutionPolicy Bypass -File c:\inetpub\letsencrypt\ImportRDGateway_Cert_From_IIS.ps1

Bây giờ script gán SSL certificate cho RDS sẽ chạy ngay sau khi chứng chỉ Let's Encrypt gia hạn. Lúc này dịch vụ RD Gateway tự động restart bằng lệnh: Restart-Service TSGateway

[alert] Khi service TSGateway restart, tất cả phiên user hiện tại bị ngắt kết nối, nên khuyên đổi tần suất chạy task gia hạn chứng chỉ 1 lần/60 ngày.[/alert]