Khi cài đặt lại hoăc tạo mới 1 trang web sử dụng như WordPress chẳng hạn chạy trên hosting panel thì việc cài đặt chứng chỉ SSL thì quá đơn giản rồi, vậy đối với website chạy trên nginx server ubuntu 20.04 thì sao?
Có nhiều hướng dẫn cài đặt chứng chỉ Let’s Encrypt SSL trên server nginx miễn phí hoặc trả phí từ PositiveSSL của Comodo và Standard SSL DV của GoDaddy. Trong bài viết này chiasefree hướng dẫn các bạn cài đặt chừng chỉ SSL Cloudflare cho máy chủ Nginx trên Ubuntu 20.04 miễn phí.
Nội dung chính
Giới thiệu
Cloudflare là một dịch vụ nằm giữa khách truy cập và máy chủ của chủ sở hữu trang web, hoạt động như một proxy ngược cho các trang web. Cloudflare cung cấp Mạng phân phối nội dung (CDN), cũng như giảm thiểu DDoS và dịch vụ máy chủ tên miền phân tán.
Nginx là một máy chủ web phổ biến chịu trách nhiệm lưu trữ một số trang web lớn nhất và có lưu lượng truy cập cao nhất trên internet. Các tổ chức thường cung cấp các trang web bằng Nginx và sử dụng Cloudflare làm nhà cung cấp CDN và DNS.
Trong hướng dẫn này, bạn sẽ bảo mật trang web của mình được cung cấp bởi Nginx bằng Origin CA certificate từ Cloudflare và sau đó định cấu hình Nginx để sử dụng các yêu cầu kéo đã được xác thực (authenticated pull requests). Ưu điểm của việc sử dụng thiết lập này là bạn được hưởng lợi từ CDN của Cloudflare và độ phân giải DNS nhanh trong khi đảm bảo rằng tất cả các kết nối đều đi qua Cloudflare. Điều này ngăn chặn bất kỳ yêu cầu độc hại nào đến máy chủ của bạn.
Origin CA certificates là gì?
Sử dụng Origin Certificate Authority (CA) tạm dịch là chứng chỉ của Tổ chức phát hành chứng chỉ gốc (CA) để mã hóa lưu lượng truy cập giữa Cloudflare và máy chủ web gốc của bạn và giảm mức tiêu thụ băng thông gốc. Sau khi được triển khai, các chứng chỉ này tương thích với chế độ SSL nghiêm ngặt. Xem thêm bài viết khá chi tiết từ trang blog Cloudflare.
Điều kiện cài SSL Cloudflare cho nginx
Để hoàn thành hướng dẫn này, bạn sẽ cần những thứ sau:
- Một máy chủ đang chạy Ubuntu 16.04, 18.04 hoặc 20.04 trở lên được thiết lập bằng cách làm theo hướng dẫn thiết lập máy chủ với Ubuntu 20.04, bao gồm
sudo
người dùng không phải root và tường lửa. Xem thêm bải viết - Nginx đã được cài đặt trên máy chủ của bạn. Ở bài sau mình sẽ hướng dẫn cách cài đặt Nginx trên Ubuntu 20.04 một cách chi tiết hơn.
- Một tài khoản Cloudflare.
- Một tên miền đã đăng ký được thêm vào tài khoản Cloudflare của bạn trỏ đến máy chủ Nginx của bạn.
- Một Nginx Server Block được định cấu hình cho miền của bạn.
Bước 1 – Tạo 1 Chứng chỉ Origin CA TLS
Cloudflare Origin CA cho phép bạn tạo chứng chỉ TLS miễn phí do Cloudflare ký để cài đặt trên máy chủ Nginx của bạn. Bằng cách sử dụng chứng chỉ TLS do Cloudflare tạo, bạn có thể đảm bảo kết nối giữa các máy chủ của Cloudflare và máy chủ Nginx của mình.
Để tạo chứng chỉ với Origin CA, hãy đăng nhập vào tài khoản Cloudflare của bạn trong trình duyệt web. Chọn tên miền bạn muốn bảo mật và điều hướng đến phần SSL/TLS trên trang tổng quan Cloudflare của bạn. Từ đó, điều hướng đến tab Origin Server và nhấp vào nút Create Certificate:
Để tùy chọn mặc định là Generate private key and CSR with Cloudflare (Tạo khóa riêng tư và CSR với Cloudflare) được chọn.
Nhấp vào Next và bạn sẽ thấy hộp thoại có Origin Certificate (chứng chỉ gốc) và Private key (khóa cá nhân). Bạn cần chuyển cả chứng chỉ gốc và khóa cá nhân từ Cloudflare sang máy chủ của mình. Vì lý do bảo mật, thông tin Private key sẽ không được hiển thị lại, vì vậy bạn hãy sao chép khóa này vào máy chủ của bạn trước khi nhấp vào Ok.
Bạn sẽ sử dụng thư mục /etc/ssl
trên máy chủ để giữ chứng chỉ gốc và các tệp khóa riêng tư. Thư mục đã tồn tại trên máy chủ.
Đầu tiên, sao chép nội dung của Origin Certificate được hiển thị trong hộp thoại trong trình duyệt của bạn.
Sau đó, trên máy chủ của bạn, hãy mở /etc/ssl/cert.pem
trong trình soạn thảo văn bản ưa thích của bạn:
1 |
sudo nano /etc/ssl/cert.pem |
Dán nội dung chứng chỉ vào tệp. Sau đó, lưu và thoát khỏi trình chỉnh sửa. Nếu bạn đang sử dụng nano
, hãy nhấn Ctrl+X, sau đó khi được nhắc, hãy nhấn Y rồi nhấn Enter.
Sau đó, quay lại trình duyệt của bạn và sao chép nội dung của Private key. Mở tệp /etc/ssl/key.pem
để chỉnh sửa:
1 |
sudo nano /etc/ssl/key.pem |
Dán khóa riêng tư vào tệp, lưu tệp và thoát khỏi trình chỉnh sửa.
Bây giờ bạn đã sao chép khóa và tệp chứng chỉ vào máy chủ của mình, bạn cần cập nhật cấu hình Nginx để sử dụng chúng.
Bước 2 – Cài đặt Chứng chỉ Origin CA trong Nginx
Trong phần trước, bạn đã tạo chứng chỉ gốc và khóa riêng tư bằng trang tổng quan của Cloudflare và lưu các tệp vào máy chủ của mình. Bây giờ, bạn sẽ cập nhật cấu hình Nginx cho trang web của mình để sử dụng chứng chỉ gốc và khóa riêng tư nhằm bảo mật kết nối giữa máy chủ của Cloudflare và máy chủ của bạn.
Đầu tiên, hãy đảm bảo rằng UFW sẽ cho phép lưu lượng HTTPS. Bật Nginx Full, sẽ mở cả port 80 (HTTP) và port 443 (HTTPS):
1 |
sudo ufw allow 'Nginx Full' |
Bây giờ tải lại UFW:
1 |
sudo ufw reload |
Cuối cùng, hãy kiểm tra xem các quy tắc mới của bạn có được cho phép và UFW đang hoạt động hay không:
1 |
sudo ufw status |
Bạn sẽ thấy một kết quả như thế này:
1 2 3 4 5 6 7 8 9 |
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6) |
Bây giờ bạn đã sẵn sàng để điều chỉnh khối máy chủ Nginx của mình. Nginx tạo một khối máy chủ mặc định trong quá trình cài đặt. Xóa nó nếu nó vẫn tồn tại vì bạn đã định cấu hình khối máy chủ tùy chỉnh cho miền của mình:
1 |
sudo rm /etc/nginx/sites-enabled/default |
Tiếp theo, mở tệp cấu hình Nginx cho miền của bạn:
1 |
sudo nano /etc/nginx/sites-available/your_domain |
Tệp sẽ trông như thế này:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
server { listen 80; listen [::]:80; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; server_name your_domain www.your_domain; location / { try_files $uri $uri/ =404; } } |
Bạn sẽ sửa đổi tệp cấu hình Nginx để thực hiện những việc sau:
- Listen trên port 80 và chuyển hướng tất cả các yêu cầu sử dụng https.
- Listen trên port 443 và sử dụng chứng chỉ gốc và khóa cá nhân được thêm trong phần trước.
Sửa đổi tệp để tệp trông giống như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
server { listen 80; listen [::]:80; server_name your_domain www.your_domain; return 302 https://$server_name$request_uri; } server { # SSL configuration listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; server_name your_domain www.your_domain; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } } |
Lưu tệp và thoát khỏi trình chỉnh sửa.
Tiếp theo, hãy kiểm tra để đảm bảo rằng không có lỗi cú pháp nào trong bất kỳ tệp cấu hình Nginx nào của bạn:
1 |
sudo nginx -t |
Nếu bạn không tìm thấy sự cố nào, hãy khởi động lại Nginx để kích hoạt các thay đổi của bạn:
1 |
sudo systemctl restart nginx |
Bây giờ, hãy chuyển đến phần SSL/TLS của bảng điều khiển Cloudflare, điều hướng đến tab Overview và thay đổi chế độ mã hóa SSL/TLS thành Full (strict) như hình bên dưới. Điều này thông báo cho Cloudflare luôn mã hóa kết nối giữa Cloudflare và máy chủ Nginx gốc của bạn.
Bây giờ, hãy truy cập trang web của bạn tại https://your_domain
để xác minh rằng nó được thiết lập đúng cách. Bạn sẽ thấy trang chủ của mình được hiển thị và trình duyệt sẽ báo cáo rằng trang đó là an toàn.
Trong phần tiếp theo, bạn sẽ thiết lập Authenticated Origin Pulls để xác minh rằng máy chủ gốc của bạn thực sự đang nói chuyện với Cloudflare chứ không phải một số máy chủ khác. Bằng cách đó, Nginx sẽ được định cấu hình để chỉ chấp nhận các yêu cầu sử dụng chứng chỉ ứng dụng khách hợp lệ từ Cloudflare; tất cả các yêu cầu chưa được chuyển qua Cloudflare sẽ bị loại bỏ.
Bước 3 – Thiết lập Authenticated Origin Pulls
Chứng chỉ Origin CA sẽ giúp Cloudflare xác minh rằng nó đang kết nối với máy chủ gốc chính xác. Bước này sẽ sử dụng Xác thực ứng dụng khách TLS để xác minh rằng máy chủ Nginx gốc của bạn đang kết nối với Cloudflare.
Trong quá trình bắt tay TLS do khách hàng xác thực, cả hai bên đều cung cấp chứng chỉ để được xác minh. Máy chủ gốc được định cấu hình để chỉ chấp nhận các yêu cầu sử dụng chứng chỉ ứng dụng khách hợp lệ từ Cloudflare. Các yêu cầu không thông qua Cloudflare sẽ bị loại bỏ vì chúng sẽ không có chứng chỉ của Cloudflare. Điều này có nghĩa là những kẻ tấn công không thể phá vỡ các biện pháp bảo mật của Cloudflare và kết nối trực tiếp với máy chủ Nginx của bạn.
Cloudflare cung cấp các chứng chỉ do CA ký với chứng chỉ sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
-----BEGIN CERTIFICATE----- MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI 42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3 Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5 lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa +4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1 QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz 6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z 0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc 5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/ fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM fVQ6VpyjEXdiIXWUq/o= -----END CERTIFICATE----- |
Bạn cũng có thể tải xuống chứng chỉ trực tiếp từ trang tài liệu của Cloudflare.
Sao chép chứng chỉ này.
Sau đó, tạo tệp /etc/ssl/cloudflare.crt
tệp để giữ chứng chỉ của Cloudflare:
1 |
sudo nano /etc/ssl/cloudflare.crt |
Thêm chứng chỉ vào tệp. Sau đó, lưu tệp và thoát khỏi trình chỉnh sửa.
Bây giờ, hãy cập nhật cấu hình Nginx của bạn để sử dụng TLS Authenticated Origin Pulls. Mở tệp cấu hình cho miền của bạn:
1 |
sudo nano /etc/nginx/sites-available/your_domain |
Thêm các chỉ thị ssl_client_certificate
và ssl_verify_client
như được hiển thị trong ví dụ sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
. . . server { # SSL configuration listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; ssl_client_certificate /etc/ssl/cloudflare.crt; ssl_verify_client on; . . . |
Lưu tệp và thoát khỏi trình chỉnh sửa.
Tiếp theo, hãy kiểm tra Nginx để đảm bảo rằng không có lỗi cú pháp nào trong cấu hình Nginx của bạn:
1 |
sudo nginx -t |
Nếu không tìm thấy sự cố nào, hãy khởi động lại Nginx để kích hoạt các thay đổi của bạn:
1 |
sudo systemctl restart nginx |
Cuối cùng, để bật Mã kéo được xác thực, hãy mở phần SSL/TLS trong bảng điều khiển Cloudflare, điều hướng đến tab Origin Server và chuyển đổi tùy chọn Authenticated Origin Pulls.
Bây giờ hãy truy cập trang web của bạn tại https://your_domain
để xác minh rằng nó đã được thiết lập đúng cách. Như trước đây, bạn sẽ thấy trang chủ của mình được hiển thị.
Để xác minh rằng máy chủ của bạn sẽ chỉ chấp nhận các yêu cầu do Cloudflare’s CA, hãy chuyển đổi tùy chọn Authenticated Origin Pulls để vô hiệu hóa nó và sau đó tải lại trang web của bạn. Bạn sẽ nhận được thông báo lỗi sau
Máy chủ gốc của bạn phát sinh lỗi nếu Cloudflare’s CA không ký một yêu cầu..
Bây giờ bạn biết nó hoạt động bình thường, hãy quay lại phần SSL/TLS trong bảng điều khiển Cloudflare, điều hướng đến tab Origin Server và bật lại tùy chọn Authenticated Origin Pulls 1 lần nữa.
Kết luận
Trong hướng dẫn thêm chứng chỉ SSL từ Cloudflare cho Nginx trên Ubuntu 16.04 | 18.04 | 20.04 này, bạn đã bảo mật SSl cho trang web được cung cấp bởi Nginx của mình bằng cách mã hóa lưu lượng truy cập giữa Cloudflare và máy chủ Nginx bằng chứng chỉ Origin CA từ Cloudflare. Sau đó, bạn thiết lập Authenticated Origin Pulls trên máy chủ Nginx để đảm bảo rằng nó chỉ chấp nhận các yêu cầu của máy chủ Cloudflare, ngăn không cho bất kỳ ai khác kết nối trực tiếp với máy chủ Nginx.
Add Comment