Thứ ba, 26/01/2016 | 00:00 GMT+7

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.comwww.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ó:

/ etc / nginx / sites-available / default
server_name _; 

Thay dấu gạch dưới _ bằng domain của bạn:

/etc/nginx/nginx.conf
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:

Output
Please 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:

Output
IMPORTANT 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 :

/etc/nginx/nginx.conf
. . . 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ó:

crontab
. . . 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 .


Tags:

Các tin liên quan

Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 14.04
2015-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