Cách cài đặt Nginx với Let's encrypt và nhận được A+ từ SSLLabs Test

theanh

Administrator
Nhân viên
Trong hướng dẫn này, tôi sẽ chỉ cho bạn từng bước cách cài đặt và cấu hình máy chủ web Nginx với chứng chỉ Letsencrypt. Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt máy chủ web Nginx, cài đặt công cụ let's encrypt, tạo chứng chỉ SSL lets encrypt, cấu hình máy chủ ảo nginx với SSL và tạo cấu hình SSL bổ sung để nhận được A+ từ bài kiểm tra SSL SSL Labs.

Điều kiện tiên quyết​

  • Máy chủ Linux - Ubuntu 18.04 hoặc CentOS 7.5
  • Quyền root

Chúng ta sẽ làm gì?​

  1. Cài đặt máy chủ web Nginx
  2. Cấu hình tường lửa UFW/Firewalld
  3. Cài đặt let's encrypt và tạo chứng chỉ SSL
  4. Cấu hình SSL bảo mật
  5. Cấu hình máy chủ ảo Nginx với SSL
  6. Kiểm tra

Bước 1 - Cài đặt máy chủ web Nginx​

Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn để cài đặt và cấu hình máy chủ web Nginx với Letsencrypt trên cả hai máy chủ Linux - Ubuntu 18.04 và CentOS 7.5.

Trên Ubuntu 18.04.​

Cập nhật kho lưu trữ và sau đó cài đặt nginx bằng lệnh apt bên dưới.
Mã:
sudo apt update
sudo apt install nginx -y

Trên CentOS 7.5.​

Cài đặt kho lưu trữ EPEL vào hệ thống CentOS và cài đặt Nginx bằng lệnh yum.
Mã:
sudo yum install epel-release -y
sudo yum install nginx -y
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ Nginx và cho phép dịch vụ này khởi chạy mỗi khi khởi động hệ thống.
Mã:
systemctl start nginx
systemctl enable nginx
Máy chủ web Nginx hiện đã được cài đặt và đang chạy trên cổng HTTP mặc định 80. Kiểm tra bằng lệnh netstat bên dưới.
Mã:
netstat -plntu

Bước 2 - Cấu hình Tường lửa UFW - Firewalld​

Bạn nên bật Tường lửa trên máy chủ và mở cổng cụ thể khi cần. Trong bước này, chúng tôi sẽ chỉ cách mở các cổng SSH, HTTP và HTTPS trên máy chủ Linux Ubuntu 18.04 bằng tường lửa UFW và Firewalld trên hệ thống CentOS 7.5.

Trên Ubuntu 18.04 - Tường lửa UFW​

Trước khi bật Tường lửa UFW trên hệ thống Ubuntu, hãy đảm bảo rằng cổng SSH được bật trong danh sách cấu hình tường lửa.

Thêm cổng dịch vụ SSH vào cấu hình tường lửa bằng lệnh ufw rồi bật dịch vụ tường lửa UFW.
Mã:
ufw allow ssh
ufw enable
Bây giờ hãy thêm các dịch vụ HTTP và HTTPS.
Mã:
ufw allow http
ufw allow https
Các cổng dịch vụ SSH, HTTP và HTTPS đã được thêm vào danh sách dịch vụ Tường lửa UFW, hãy kiểm tra xem nó có đang sử dụng lệnh bên dưới không.
Mã:
ufw status

Trên CentOS 7.5 - Firewalld​

Trước khi thêm cổng và dịch vụ vào firewelld, hãy đảm bảo dịch vụ firewalld đang hoạt động.

Khởi động dịch vụ firewalld và cho phép dịch vụ này khởi chạy mỗi khi khởi động hệ thống.
Mã:
systemctl start firewalld
systemctl enable firewalld
Lưu ý:
  • Dịch vụ SSH sẽ được bật theo mặc định trong danh sách dịch vụ Firewald.
Bây giờ hãy thêm các dịch vụ HTTP và HTTPS bằng lệnh firewall-cmd bên dưới.
Mã:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
Tải lại cấu hình firewalld và kiểm tra danh sách dịch vụ.
Mã:
firewall-cmd --reload
firewall-cmd --list-services
Và bạn sẽ nhận được các dịch vụ SSH, HTTP và HTTPS trong danh sách.


Bước 3 - Cài đặt Letsencrypt và tạo chứng chỉ​

Trong bước này, chúng ta sẽ cài đặt công cụ letsencrypt và tạo chứng chỉ SSL mạnh Letsencrypt bằng lệnh cerbot.

Trên Ubuntu 18.04​

Cài đặt các gói letsencrypt bằng lệnh apt bên dưới.
Mã:
sudo apt install letsencrypt -y

Trên CentOS 7.5​

Bây giờ hãy cài đặt các gói letsencrypt trên CentOS 7 bằng lệnh yum bên dưới.
Mã:
sudo yum install certbot -y
Sau khi cài đặt hoàn tất, chúng ta sẽ tạo một cấu hình mới sẽ được sử dụng để tạo các tệp chứng chỉ SSL.

Trên Ubuntu 18.04​

Đi tới thư mục cấu hình '/etc/nginx' và tạo tệp cấu hình mới 'cerbot.conf' trong thư mục 'snippets'.
Mã:
cd /etc/nginx/
vim snippets/certbot.conf
Dán cấu hình sau vào đó.
Mã:
vị trí /.well-known { bí danh /var/www/html/.well-known; }
Lưu và thoát.

Bây giờ hãy chỉnh sửa tệp máy chủ ảo Nginx mặc định.
Mã:
vim sites-available/default
Thêm cấu hình sau vào khối 'server {..}'.
Mã:
include snippets/certbot.conf;
Lưu và thoát.

Trên CentOS 7.5​

Đi tới thư mục cấu hình '/etc/nginx' và tạo tệp cấu hình mới 'certbot.conf' trong thư mục 'default.d'.
Mã:
cd /etc/nginx/
vim default.d/certbot.conf
Dán cấu hình bên dưới.
Mã:
location /.well-known { alias /usr/share/nginx/html/.well-known; }
Lưu và thoát.

Bây giờ hãy kiểm tra cấu hình nginx và đảm bảo không có lỗi, sau đó khởi động lại dịch vụ nginx.
Mã:
nginx -t
systemctl restart nginx
Tiếp theo, tạo chứng chỉ SSL letsencrypt bằng lệnh certbot.

Trên Ubuntu 18.04​

Mã:
certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [emailprotected] -w /var/www/html -d hakase-labs.io

Trên CentOS 7.5​

Mã:
certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [emailprotected] -w /usr/share/nginx/html -d hakase-labs.io
Lưu ý:
  • Chúng tôi sẽ chỉ định kích thước khóa RSA cho miền của mình là '4096' và chúng tôi sẽ xác định phương thức xác thực cho thư mục gốc web mặc định là '/var/www/html' trên hệ thống Ubuntu và thư mục '/usr/share/nginx/html' cho hệ thống CentOS 7.


Khi hoàn tất, bạn sẽ nhận được tất cả các tệp chứng chỉ SSL cho tên miền trên thư mục '/etc/letsencrypt/live'.

Để có thêm bảo mật, chúng tôi sẽ tạo khóa DHPARAM '4096' bằng lệnh OpenSSL như được hiển thị bên dưới.
Mã:
openssl dhparam -out /etc/nginx/dhparam.pem 4096
Khóa DHPARAM đã được tạo vào thư mục '/etc/nginx'.

Bước 4 - Cấu hình SSL​

Trong bước này, chúng tôi sẽ xác định cấu hình SSL cho máy chủ web Nginx. Chúng tôi sẽ tạo cấu hình mới 'ssl.conf' chứa cấu hình bảo mật SSL được tinh chỉnh tập trung cho máy chủ web Nginx.

Trên Ubuntu 18.04​

Đi tới thư mục cấu hình '/etc/nginx/' và tạo cấu hình SSL mới 'ssl.conf' trong thư mục 'snippets'.
Mã:
cd /etc/nginx/
vim snippets/ssl.conf

Trên CentOS 7.5​

Đi tới thư mục cấu hình '/etc/nginx/' và tạo cấu hình SSL mới 'ssl/conf' trong thư mục 'default.d'.
Mã:
cd /etc/nginx/
vim default.d/ssl.conf
Dán cấu hình SSL sau vào đó.
Mã:
# Chỉ định TLS phiên bảnssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;# Khuyến nghị về Ciphersuites từ chiper.li# Sử dụng chipersuites này để đạt 100 điểm trong bài kiểm tra SSLabs# Một số thiết bị sẽ không hỗ trợ#ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384";# Khuyến nghị về Mozilla Ciphersuits# Sử dụng cho tất cả các thiết bị được hỗ trợssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';# Sử dụng khóa DHPARAM và đường cong ECDH >= 256bitssl_ecdh_curve secp384r1;ssl_dhparam /etc/nginx/dhparam.pem;server_tokens off;ssl_session_timeout 1d;ssl_session_cache shared:SSL:50m;ssl_session_tickets off;# Bật HTTP Strict-Transport-Security# Nếu bạn có một tên miền phụ của trang web,# hãy cẩn thận khi sử dụng tùy chọn 'includeSubdomains'add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";# Bật OSCP Stapling cho máy chủ web Nginx# Nếu bạn đang sử dụng SSL từ Letsencrypt,# hãy sử dụng chứng chỉ 'chain.pem'ssl_stapling on;ssl_stapling_verify on;ssl_trusted_certificate /etc/letsencrypt/live/hakase-labs.io/chain.pem;resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 5s;# Bảo vệ XSS cho máy chủ web Nginxadd_header X-Frame-Options DENY;add_header X-XSS-Protection "1; mode=block";add_header X-Content-Type-Options nosniff;add_header X-Robots-Tag none;
Lưu và thoát.

Lưu ý:
  • Chỉ định phiên bản TLS cho trang web, chỉ chấp nhận TLSv1 TLSv1.1 TLSv1.2.
  • Chỉ định bộ mã hóa SSL và khuyến nghị sử dụng bộ mã hóa SSL theo đề xuất của Mozilla để có được khả năng tương thích với tất cả các thiết bị.
  • Bật HSTS, OSCP Stapling và thêm bảo vệ XSS.

Bước 5 - Cấu hình Nginx Virtual Host với SSL​

Trong bước này, chúng ta sẽ tạo một tệp máy chủ ảo cho tên miền. Chúng ta sẽ tạo một máy chủ ảo mới, một tên miền có tên hakase-labs.io và thư mục gốc web của nó sẽ nằm tại thư mục '/var/www/site01'.

Tạo thư mục mới '/var/www/site01' và tạo tệp 'index.html' bên trong.
Mã:
mkdir -p /var/www/site01
echo '[HEADING=1]Nginx - Letsencrypt - A+[/HEADING]' > /var/www/site01/index.html
Bây giờ hãy đến thư mục cấu hình '/etc/nginx' và tạo tệp máy chủ ảo mới có tên 'hakase-labs.io' cho ubuntu và 'hakase-labs.conf' cho hệ thống CentOS 7.

Trên Ubuntu 18.04​

Mã:
cd /etc/nginx/
vim sites-available/hakase-labs.io

Trên CentOS 7.5​

Mã:
cd /etc/nginx/
vim conf.d/hakase-labs.conf
Dán mẫu cấu hình máy chủ ảo Nginx sau vào đó.
Mã:
server { listen 80; listen [::]:80; server_name hakase-labs.io; trả về 301 https://$host$request_uri;}máy chủ { lắng nghe 443 ssl http2; lắng nghe [::]:443 ssl http2; gốc /var/www/site01; chỉ mục index.html index.php index.htm; tên máy chủ hakase-labs.io; nhật ký lỗi /var/log/nginx/hakase-error.log cảnh báo; chứng chỉ ssl /etc/letsencrypt/live/hakase-labs.io/fullchain.pem; khóa chứng chỉ ssl /etc/letsencrypt/live/hakase-labs.io/privkey.pem; #Cấu hình SSL bao gồm đoạn mã/ssl.conf; vị trí ~ /.well-known { cho phép tất cả; } vị trí / { try_files $uri $uri/ =404; } vị trí = /favicon.ico { log_not_found tắt; access_log tắt; } location = /robots.txt { cho phép tất cả; log_not_found tắt; access_log tắt; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { hết hạn tối đa; log_not_found tắt; }}
Lưu và thoát.

Lưu ý:
  • Thay đổi dòng 'include snippets/ssl.conf;'. Nếu bạn đang sử dụng Ubuntu, hãy để mặc định. Và nếu bạn đang sử dụng CentOS, hãy thay đổi thư mục thành 'default.d/ssl.conf'

Chỉ trên Hệ thống Ubuntu​

Kích hoạt tệp máy chủ ảo mới và kiểm tra cấu hình, đảm bảo không có lỗi.
Mã:
ln -s /etc/nginx/sites-available/hakase-labs.io /etc/nginx/sites-enabled/
nginx -t
Bây giờ hãy khởi động lại dịch vụ nginx.
Mã:
systemctl restart nginx
Máy chủ ảo mới có HTTPS được bật và cấu hình SSL bổ sung đã được tạo.

Kiểm tra bằng lệnh netstat và bạn sẽ thấy cổng HTTPS 443 trong danh sách.
Mã:
netstat -plntu

Bước 6 - Kiểm tra​

Mở trình duyệt web của bạn và nhập tên miền của bạn, của tôi là 'http://hakase-labs.io'.



Và bạn sẽ được chuyển hướng đến kết nối HTTPS.

Bây giờ hãy truy cập trang Kiểm tra SSL 'https://www.ssllabs.com/ssltest/' và nhập tên miền của riêng bạn, sau đó đợi để có kết quả.

Sau đây là kết quả của tôi khi sử dụng 'Khuyến nghị về bộ mã hóa Mozilla'.



Và sau đây là kết quả của tôi khi sử dụng 'Khuyến nghị về bộ mã hóa Cipher.li'.



Bạn sẽ thấy tất cả các kết quả đều có kết quả 'A+' và chỉ khác nhau về 'Độ mạnh mã hóa' trong các khuyến nghị của Mozilla và Khuyến nghị của Cipherli.st.

Để kiểm tra OSCP Stapling và HSTS trên máy chủ, hãy cuộn trang kết quả kiểm tra và bạn sẽ nhận được kết quả như hiển thị bên dưới.



Nếu bạn muốn kiểm tra OSCP Stapling từ dòng lệnh, hãy kiểm tra bằng lệnh sau.
Mã:
echo QUIT | openssl s_client -connect hakase-labs.io:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'


Đối với thử nghiệm HSTS, hãy kiểm tra bằng lệnh curl bên dưới.
Mã:
curl -s -D- https://hakase-labs.io | grep -i Strict


Quá trình cài đặt và cấu hình máy chủ web Nginx với SSL Letsencrypt cũng như đạt điểm A+ từ bài kiểm tra SSLabs đã hoàn tất thành công.

Tài liệu tham khảo​

 
Back
Bên trên