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.
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á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.
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.
Bây giờ hãy thêm các dịch vụ HTTP và 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.
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.
Lưu ý:
Tải lại cấu hình firewalld và kiểm tra danh sách dịch vụ.
Và bạn sẽ nhận được các dịch vụ SSH, HTTP và HTTPS trong danh sách.
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.
Dán cấu hình sau vào đó.
Lưu và thoát.
Bây giờ hãy chỉnh sửa tệp máy chủ ảo Nginx mặc định.
Thêm cấu hình sau vào khối 'server {..}'.
Lưu và thoát.
Dán cấu hình bên dưới.
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.
Tiếp theo, tạo chứng chỉ SSL letsencrypt bằng lệnh certbot.
Lưu ý:
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.
Khóa DHPARAM đã được tạo vào thư mục '/etc/nginx'.
Dán cấu hình SSL sau vào đó.
Lưu và thoát.
Lưu ý:
Tạo thư mục mới '/var/www/site01' và tạo tệp 'index.html' bên trong.
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.
Dán mẫu cấu hình máy chủ ảo Nginx sau vào đó.
Lưu và thoát.
Lưu ý:
Bây giờ hãy khởi động lại dịch vụ 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.
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.
Đối với thử nghiệm HSTS, hãy kiểm tra bằng lệnh curl bên dưới.
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.
Đ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ì?
- Cài đặt máy chủ web Nginx
- Cấu hình tường lửa UFW/Firewalld
- Cài đặt let's encrypt và tạo chứng chỉ SSL
- Cấu hình SSL bảo mật
- Cấu hình máy chủ ảo Nginx với SSL
- 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
Mã:
systemctl start nginx
systemctl enable nginx
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
Mã:
ufw allow http
ufw allow https
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
- Dịch vụ SSH sẽ được bật theo mặc định trong danh sách dịch vụ Firewald.
Mã:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
Mã:
firewall-cmd --reload
firewall-cmd --list-services
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
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
Mã:
vị trí /.well-known { bí danh /var/www/html/.well-known; }
Bây giờ hãy chỉnh sửa tệp máy chủ ảo Nginx mặc định.
Mã:
vim sites-available/default
Mã:
include snippets/certbot.conf;
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
Mã:
location /.well-known { alias /usr/share/nginx/html/.well-known; }
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
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
- 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
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
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 ý:
- 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
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
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 ý:
- 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
Mã:
systemctl restart nginx
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.