Hướng dẫn cấu hình Nginx sử dụng Let’s Encrypt trên Ubuntu…

0
hãy mã hóa nginx

Cho phép mã hóa Là một cơ quan cấp chứng chỉ Miễn phí và mở (cơ quan cấp chứng chỉ) được phát triển bởi Nhóm nghiên cứu bảo mật Internet (ISRG). Chứng chỉ do Let’s Encrypt phát hành được hầu hết các trình duyệt web hiện đại ngày nay tin dùng.

Trong bài viết này, mình sẽ hướng dẫn các bạn cách thiết lập bảo mật HTTPS cho trang web bằng Let’s Encrypt trên Nginx bằng công cụ certbot trên Ubuntu 18.04.

Yêu cầu

Trước khi bắt đầu, bạn cần đảm bảo rằng bạn đã chuẩn bị và đáp ứng các yêu cầu sau trước khi tiếp tục với hướng dẫn này.

  • Tên miền DNS trỏ đến đúng IP công cộng của máy chủ mà bạn sẽ cài đặt. Trong bài viết này, tôi sẽ sử dụng tên miền vu-review.com.
  • Máy chủ đã cài đặt Nginx

Hướng dẫn cài đặt Certbot

Certbot là một công cụ đầy đủ tính năng và dễ sử dụng cho phép chúng tôi tự động hóa các tác vụ lấy và làm mới chứng chỉ SSL của Let’s Encrypt và định cấu hình máy chủ web của chúng tôi để sử dụng chứng chỉ. Gói certbot có sẵn trong kho lưu trữ Ubuntu, vì vậy bạn chỉ cần sử dụng lệnh apt để cài đặt nó.

Cập nhật danh sách các gói và cài đặt gói certbot như sau:

sudo apt update
sudo apt install certbot

Tạo nhóm DH (Diffie-Hellma)

Trao đổi Key Diffie – Hellman (DH) là cơ chế trao đổi Key mật mã qua một kênh liên lạc không an toàn. Tôi sẽ tạo một bộ tham số DH 2048 bit mới để tăng cường bảo mật.

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Nếu muốn, bạn cũng có thể thay đổi kích thước lên đến 4096 bit, nhưng trong trường hợp này, quá trình khởi tạo Key có thể mất đến 10 phút – tùy thuộc vào entropy của hệ thống.

>>> Xem thêm:  Phân biệt Swapping và Paging trong quản lý memory

Nhận chứng chỉ SSL Let’s Encrypt

Để nhận chứng chỉ SSL cho miền của mình, tôi sẽ sử dụng plugin Webroot – nó sẽ tạo một File tạm thời để xác minh miền được truy vấn trong thư mục. ${webroot-path}/.well-known/acme-challenge

Để đơn giản, tôi sẽ ánh xạ tất cả các yêu cầu HTTP với các đường dẫn .well-known/acme-challenge đến thư mục là /var/lib/letsencrypt.

Các lệnh sau sẽ tạo một thư mục cho phép nó có thể ghi vào máy chủ Nginx.

sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt

Để tránh trùng lặp mã, tôi sẽ tạo 2 đoạn mã trong khối của máy chủ Nginx.

Đầu tiên, mở vim và tạo mã đầu tiên letsencrypt.conf:

sudo vi /etc/nginx/snippets/letsencrypt.conf

Sau đó dán mã này

location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

Tạo mã thứ hai là ssl.conf Đây là đoạn mã chứa các đề xuất như Ghim OCSP, Bảo mật truyền tải nghiêm ngặt HTTP (HSTS) và tiêu đề HTTP tập trung vào bảo mật của FireFox.

sudo nano /etc/nginx/snippets/ssl.conf

Dán mã này

ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

Sau khi tạo và lưu 2 đoạn mã trên, hãy mở khối miền chứaletsencrypt.confnhập như sau:

sudo vi /etc/nginx/sites-available/vu-review.com.conf

Sau đó dán mã này

server {
  listen 80;
  server_name vu-review.com www.vu-review.com;

  include snippets/letsencrypt.conf;
}

Để kích hoạt khối máy chủ File mới, tôi cần tạo một khối liên kết tượng trưng từ File này đến thư mục sites-enabled – Đây là thư mục được đọc bởi Nginx trong quá trình khởi động.

sudo ln -s /etc/nginx/sites-available/vu-review.com.conf /etc/nginx/sites-enabled/

Sau đó, khởi động lại nginx

sudo systemctl restart nginx

Bây giờ, bạn có thể chạy Certbot với plugin webhoot và nhận File chứng chỉ SSL bằng cách chạy lệnh sau:

sudo certbot certonly --agree-tos --email contact@vu-review.com --webroot -w /var/lib/letsencrypt/ -d vu-review.com -d www.vu-review.com

Nếu chứng chỉ SSL được nhận thành công, certbot sẽ in một thông báo như sau:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/vu-review.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/vu-review.com/privkey.pem
   Your cert will expire on 2020-06-13. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. 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

Bây giờ tôi đã có File chứng chỉ, tôi có thể chỉnh sửa khối máy chủ miền để sử dụng SSL ở định dạng sau:

sudo vi /etc/nginx/sites-available/vu-review.com.conf
# Redirect HTTP -> HTTPS
server {
    listen 80;
    server_name www.vu-review.com vu-review.com;

    include snippets/letsencrypt.conf;
    return 301 https://vu-review.com$request_uri;
}

# Redirect WWW -> NON WWW
server {
    listen 443 ssl http2;
    server_name www.vu-review.com;

    ssl_certificate /etc/letsencrypt/live/vu-review.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vu-review.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/vu-review.com/chain.pem;
    include snippets/ssl.conf;

    return 301 https://vu-review.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name vu-review.com;

    root /var/www/html/vu-review.com;
    index index.php;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/vu-review.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vu-review.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/vu-review.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # log files
    access_log /var/log/nginx/vu-review.com.access.log;
    error_log /var/log/nginx/vu-review.com.error.log;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires max;
        log_not_found off;
    }
}

Với cấu hình trên, tôi buộc trang web phải sử dụng HTTPS và chuyển hướng từ www sang không phải www.

>>> Xem thêm:  Hướng dẫn kiểm tra phiên bản Linux

Tải lại máy chủ Nginx để các thay đổi hình ảnh được thực hiện ngay lập tức.

sudo systemctl reload nginx

Tự động làm mới chứng chỉ SSL Let’s Encrypt

Chứng chỉ SSL của Let’s Encrypt chỉ có giá trị trong 90 ngày. Để tự động làm mới chứng chỉ trước khi chứng chỉ hết hạn, certbot tạo một cronjob chạy 2 lần mỗi ngày và sẽ tự động làm mới chứng chỉ bất kỳ chứng chỉ nào sau 30 ngày sẽ hết hạn.

Vì tôi sẽ sử dụng plugin certbot webroot sau khi chứng chỉ SSL được làm mới, nên tôi cũng sẽ cần tải lại nginx. Tại thời điểm này, tôi sẽ thêm --renew-hook "systemctl reload nginx" tập tin /etc/cron.d/certbot

sudo vi /etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

Để kiểm tra việc làm mới, bạn có thể sử dụng certbot với tùy chọn --dry-run

sudo certbot renew --dry-run

Nếu không có lỗi, quá trình làm mới chứng chỉ đã thành công.

Kết luận

Trong bài viết này, tôi đã sử dụng Let’s Encrypt để tải xuống chứng chỉ SSL cho tên miền vu-review.com của mình. Và tạo 2 đoạn mã Nginx để tránh trùng lặp mã và cấu hình Nginx khi sử dụng chứng chỉ. Và cuối cùng, sử dụng cronjob để tự động làm mới chứng chỉ SSL trước khi nó hết hạn.

Xem thêm nhiều bài khác tại : https://excel-cracker.com/he-dieu-hanh

Leave A Reply

Your email address will not be published.