Cách bảo mật Nginx bằng Let's Encrypt trên CentOS 7
Let's Encrypt là Tổ chức phát hành certificate (CA) mới cung cấp cách dễ dàng để lấy và cài đặt certificate TLS / SSL miễn phí, do đó cho phép HTTPS được mã hóa trên web server . Nó đơn giản hóa quy trình bằng cách cung cấp một ứng dụng client , Certbot, cố gắng tự động hóa hầu hết (nếu không phải tất cả) các bước cần thiết. Hiện tại, toàn bộ quá trình lấy và cài đặt certificate hoàn toàn tự động trên cả web server Apache và Nginx. Trong hướng dẫn này,  ta  sẽ chỉ cho bạn cách sử dụng ứng dụng certbot Let's Encrypt để lấy certificate  SSL miễn phí và sử dụng nó với Nginx trên CentOS 7.  Ta  cũng sẽ hướng dẫn bạn cách tự động gia hạn certificate  SSL  của bạn .
Yêu cầu
Trước khi làm theo hướng dẫn này, bạn cần một vài thứ.
-   Server  CentOS 7 với  user  không phải root có  quyền  sudo. Bạn có thể tìm hiểu cách cài đặt một account user như vậy theo các bước 1-3 trong hướng dẫn cài đặt server ban đầu cho CentOS 7 của ta .
- Bạn phải sở hữu hoặc kiểm soát domain đã đăng ký mà bạn muốn sử dụng certificate . Nếu bạn chưa có domain đã đăng ký, bạn có thể đăng ký một domain với một trong nhiều công ty đăng ký domain hiện có (ví dụ: Namecheap, GoDaddy, v.v.).
-  Bản ghi DNS A trỏ domain  của bạn đến địa chỉ IP công cộng của  server  của bạn. Điều này là bắt buộc vì cách Let's Encrypt xác thực rằng bạn sở hữu domain  mà nó đang cấp certificate . Ví dụ: nếu bạn muốn lấy certificate  cho example.com, thì domain đó phải phân giải tới server của bạn để quá trình xác thực hoạt động. Cài đặt của ta sẽ sử dụng example.com và www.example.com làm domain , vì vậy cả hai bản ghi DNS đều được yêu cầu .
Khi bạn đã có tất cả các yêu cầu , hãy chuyển sang cài đặt phần mềm client Let's Encrypt.
Bước 1 - Cài đặt Certbot Let's Encrypt Client
 Bước đầu tiên để sử dụng Let's Encrypt để lấy certificate  SSL là cài đặt phần mềm certbot trên  server  của bạn. Hiện tại, cách tốt nhất để cài đặt nó là thông qua kho EPEL.
Cho phép truy cập vào kho EPEL trên server của bạn bằng lệnh :
- sudo yum install epel-release 
Khi repository  đã được kích hoạt, bạn có thể nhận được gói certbot-nginx  bằng lệnh :
- sudo yum install certbot-nginx 
Máy khách certbot Let's Encrypt hiện đã được cài đặt và sẵn sàng sử dụng.
Bước 2 - Cài đặt Nginx
Nếu bạn chưa cài đặt Nginx, bạn có thể làm như vậy ngay bây giờ. Kho EPEL đã được kích hoạt từ phần trước, vì vậy bạn có thể cài đặt Nginx bằng lệnh :
- sudo yum install nginx 
Sau đó, khởi động Nginx bằng systemctl :
- sudo systemctl start nginx 
Certbot có thể tự động  cấu hình  SSL cho Nginx, nhưng nó cần có khả năng tìm thấy khối server chính xác trong cấu hình của bạn. Nó thực hiện điều này bằng cách tìm kiếm lệnh server_name  trùng với  domain  bạn đang certificate request . Nếu bạn đang bắt đầu với bản cài đặt Nginx mới, bạn có thể cập nhật file  cấu hình mặc định:
- sudo vi /etc/nginx/nginx.conf 
Tìm dòng server_name hiện có:
server_name _; Thay dấu gạch dưới _ bằng domain  của bạn:
server_name example.com www.example.com; Lưu file và thoát khỏi editor . Xác minh cú pháp của các chỉnh sửa cấu hình của bạn bằng:
- sudo nginx -t 
Nếu điều đó chạy không có lỗi, hãy reload Nginx để tải cấu hình mới:
- sudo systemctl reload nginx 
Certbot bây giờ sẽ có thể tìm thấy khối server chính xác và cập nhật nó. Bây giờ  ta  sẽ cập nhật firewall   của bạn  để cho phép  truy cập HTTP S.
Bước 3 - Cập nhật Tường lửa
Nếu bạn đã bật firewall , hãy đảm bảo cổng 80 và 443 được mở cho lưu lượng đến. Nếu bạn không chạy firewall , bạn có thể bỏ qua.
Nếu bạn có một bức firewall firewalld chạy, bạn có thể mở các cổng bằng lệnh :
- sudo firewall-cmd --add-service=http 
- sudo firewall-cmd --add-service=https 
- sudo firewall-cmd --runtime-to-permanent 
Nếu firewall iptables đang chạy, các lệnh bạn cần chạy phụ thuộc nhiều vào bộ luật hiện tại của bạn. Đối với bộ luật cơ bản, bạn có thể thêm quyền truy cập HTTP và HTTPS bằng lệnh :
- sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
- sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT 
Bây giờ ta đã sẵn sàng để chạy Certbot và tìm nạp certificate của ta .
Bước 4 - Lấy certificate
Certbot cung cấp nhiều cách khác nhau để lấy certificate SSL, thông qua các plugin khác nhau. Plugin Nginx sẽ xử lý việc cấu hình lại Nginx và reload cấu hình khi nào cần thiết:
- sudo certbot --nginx -d example.com -d www.example.com 
Điều này chạy certbot với plugin --nginx , sử dụng -d để chỉ định tên mà  ta  muốn certificate  hợp lệ.
 Nếu đây là lần đầu tiên bạn chạy certbot , bạn sẽ  được yêu cầu  nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau khi làm như vậy, certbot sẽ giao tiếp với  server  Let's Encrypt, sau đó chạy thử thách để  xác minh  bạn kiểm soát domain  mà bạn đang certificate request .
 Nếu thành công, certbot sẽ hỏi bạn muốn  cấu hình  cài đặt HTTPS  của bạn  như thế nào:
OutputPlease choose whether HTTPS access is required or optional. ------------------------------------------------------------------------------- 1: Easy - Allow both HTTP and HTTPS access to these sites 2: Secure - Make all requests redirect to secure HTTPS access ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel): Chọn lựa chọn của bạn rồi nhấn ENTER . Cấu hình sẽ được cập nhật và Nginx sẽ  reload  để chọn cài đặt mới. certbot sẽ kết thúc bằng một thông báo cho bạn biết quá trình đã thành công và nơi lưu trữ certificate  của bạn:
OutputIMPORTANT NOTES:  - Congratulations! Your certificate and chain have been saved at    /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will    expire on 2017-10-23. To obtain a new or tweaked version of this    certificate in the future, simply run certbot again with the    "certonly" option. To non-interactively renew *all* of your    certificates, run "certbot renew"  - Your account credentials have been saved in your Certbot    configuration directory at /etc/letsencrypt. You should make a    secure backup of this folder now. This configuration directory will    also contain certificates and private keys obtained by Certbot so    making regular backups of this folder is ideal.  - If you like Certbot, please consider supporting our work by:     Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate    Donating to EFF:                    https://eff.org/donate-le Chứng chỉ của bạn đã được  download , cài đặt và tải. Hãy thử  reload   trang web  bằng https:// và để ý chỉ báo bảo mật của trình duyệt. Nó phải thể hiện rằng trang web được bảo mật đúng cách, thường có biểu tượng ổ khóa màu xanh lục.
Bước 5 - Cập nhật các thông số Diffie-Hellman
 Nếu bạn kiểm tra  server   của bạn  bằng Kiểm tra  server  SSL Labs ngay bây giờ, nó sẽ chỉ đạt điểm B do các thông số Diffie-Hellman yếu. Điều này ảnh hưởng đến bảo mật của trao đổi khóa ban đầu giữa  server  của  ta  và  user  của nó.  Ta  có thể sửa lỗi này bằng cách tạo một file  dhparam.pem mới và thêm nó vào khối server của  ta .
 Tạo file  bằng openssl :
- sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 
Quá trình này sẽ mất một lúc, tối đa vài phút. Khi hoàn tất, hãy mở file  cấu hình Nginx có chứa khối server của bạn. Trong ví dụ của  ta , đó là file  cấu hình mặc định:
- sudo vi /etc/nginx/nginx.conf 
Dán dòng sau vào bất kỳ đâu trong khối server :
. . . ssl_dhparam /etc/ssl/certs/dhparam.pem; Lưu file và thoát khỏi editor , sau đó xác minh cấu hình:
- sudo nginx -t 
Nếu bạn không có lỗi, hãy reload Nginx:
- sudo systemctl reload nginx 
Trang web hiện an toàn hơn và sẽ nhận được xếp hạng A.
Bước 6 - Cài đặt Tự động gia hạn
Chứng chỉ của Let's Encrypt chỉ có giá trị trong chín mươi ngày. Điều này nhằm khuyến khích user tự động hóa quy trình gia hạn certificate của họ. Ta cần cài đặt một lệnh chạy thường xuyên để kiểm tra các certificate hết hạn và tự động gia hạn chúng.
 Để chạy kiểm tra gia hạn hàng ngày,  ta  sẽ sử dụng cron , một dịch vụ hệ thống tiêu chuẩn để chạy các công việc định kỳ.  Ta  yêu cầu cron phải làm gì bằng cách mở và chỉnh sửa một file  có tên là crontab .
- sudo crontab -e 
Trình soạn thảo văn bản của bạn sẽ mở crontab mặc định là một file văn bản trống tại thời điểm này. Dán vào dòng sau, sau đó lưu và đóng nó:
. . . 15 3 * * * /usr/bin/certbot renew --quiet Phần 15 3 * * * của dòng này  nghĩa là  “chạy lệnh sau vào lúc 3:15 sáng, mỗi ngày”. Bạn có thể chọn bất kỳ lúc nào.
 Lệnh renew cho Certbot sẽ kiểm tra tất cả các certificate  được cài đặt trên hệ thống và cập nhật bất kỳ certificate  nào được đặt để hết hạn trong vòng chưa đầy ba mươi ngày. --quiet yêu cầu Certbot không xuất thông tin hoặc chờ  user  nhập.
 cron bây giờ sẽ chạy lệnh này hàng ngày. Tất cả các certificate  đã cài đặt sẽ tự động được gia hạn và  reload  khi chúng còn ba mươi ngày trở xuống trước khi hết hạn.
 Để biết thêm thông tin về cách tạo và lập lịch công việc cron, bạn có thể xem Cách sử dụng Cron để tự động hóa công việc trong hướng dẫn VPS .
Kết luận
 Trong hướng dẫn này,  ta  đã cài đặt certbot client  Let's Encrypt,  download  certificate  SSL cho domain  của  ta ,  cấu hình  Nginx để sử dụng các certificate  này và  cài đặt  gia hạn certificate  tự động. Nếu bạn có thêm câu hỏi về việc sử dụng Certbot, tài liệu của họ là  một nơi tốt để tham khảo .
Các tin liên quan
Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 14.042015-12-17
Cách chạy Nginx trong Docker Container trên Ubuntu 14.04
2015-10-28
Cách thêm ngx_pagespeed vào Nginx trên CentOS 7
2015-09-30
Cách thêm ngx_pagespeed vào Nginx trên Ubuntu 14.04
2015-09-22
Cách thêm ngx_pagespeed vào Nginx trên Debian 8
2015-09-20
Cách bảo vệ server Nginx với Fail2Ban trên Ubuntu 14.04
2015-08-14
Cách cài đặt HHVM với Nginx trên Ubuntu 14.04
2015-08-12
Cách thiết lập xác thực mật khẩu với Nginx trên Ubuntu 14.04
2015-08-10
Cách cài đặt Nginx trên Debian 8
2015-07-09
Cách lưu trữ nhiều trang web một cách an toàn với Nginx và Php-fpm trên Ubuntu 14.04
2015-07-01
 

