Android

Bảo mật nginx với mã hóa trên debian 10 linux

[042] Installing a Let's Encrypt SSL/TLS certificate on Debian Linux/Google Cloud

[042] Installing a Let's Encrypt SSL/TLS certificate on Debian Linux/Google Cloud

Mục lục:

Anonim

Let Encrypt là cơ quan cấp chứng chỉ mở, tự động và miễn phí được phát triển bởi Nhóm nghiên cứu bảo mật Internet (ISRG) cung cấp chứng chỉ SSL miễn phí.

Chứng chỉ do Let Encrypt cấp được tin cậy bởi tất cả các trình duyệt chính và có giá trị trong 90 ngày kể từ ngày phát hành.

Hướng dẫn này chỉ ra cách cài đặt chứng chỉ SSL Encrypt SSL miễn phí trên Debian 10, Buster chạy Nginx như một máy chủ web. Chúng tôi cũng sẽ trình bày cách định cấu hình Nginx để sử dụng chứng chỉ SSL và bật HTTP / 2.

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

Đảm bảo các điều kiện tiên quyết sau được đáp ứng trước khi tiến hành hướng dẫn:

  • Đăng nhập với quyền root hoặc người dùng với quyền sudo. Tên miền mà bạn muốn lấy chứng chỉ SSL phải trỏ đến IP máy chủ công cộng của bạn. Chúng tôi sẽ sử dụng example.com .Nginx được cài đặt.

Cài đặt Certbot

Chúng tôi sẽ sử dụng công cụ certbot để lấy và gia hạn các chứng chỉ.

Certbot là một công cụ đầy đủ tính năng và dễ sử dụng, tự động hóa các tác vụ để lấy và làm mới Chứng chỉ SSL Hãy mã hóa và định cấu hình máy chủ web để sử dụng chứng chỉ.

Gói certbot được bao gồm trong kho Debian mặc định. Chạy các lệnh sau để cài đặt certbot:

sudo apt update sudo apt install certbot

Tạo nhóm Dh (Diffie-Hellman)

Trao đổi khóa Diffieifer Hellman (DH) là một phương pháp trao đổi khóa mật mã an toàn qua một kênh liên lạc không bảo mật.

Chúng tôi sẽ tạo một bộ thông số DH 2048 bit mới để tăng cường bảo mật:

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

Bạn cũng có thể thay đổi kích thước lên tới 4096 bit, nhưng việc tạo có thể mất hơn 30 phút tùy thuộc vào entropy của hệ thống.

Nhận chứng chỉ SSL Hãy mã hóa

Để có được chứng chỉ SSL cho tên miền, chúng tôi sẽ sử dụng plugin Webroot. Nó hoạt động bằng cách tạo một tệp tạm thời để xác thực tên miền được yêu cầu trong thư mục ${webroot-path}/.well-known/acme-challenge . Máy chủ Let Encrypt tạo các yêu cầu HTTP đến tệp tạm thời để xác thực rằng miền được yêu cầu phân giải đến máy chủ nơi certbot chạy.

Chúng tôi sẽ ánh xạ tất cả các yêu cầu HTTP cho .well-known/acme-challenge vào một thư mục duy nhất, /var/lib/letsencrypt .

Chạy các lệnh sau để tạo thư mục và tạo thư mục cho máy chủ Nginx:

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

Để tránh trùng lặp mã, chúng tôi sẽ tạo hai đoạn mã sẽ được bao gồm trong tất cả các tệp khối máy chủ Nginx.

Mở trình soạn thảo văn bản của bạn và tạo đoạn mã đầu tiên, letsencrypt.conf :

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

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

Đoạn mã thứ hai ssl.conf bao gồm các trình cắt được đề xuất bởi Mozilla, cho phép OCSP Stapling, HTTP Strict Transport Security (HSTS) và thực thi một số tiêu đề HTTP tập trung vào bảo mật.

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

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; 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=63072000" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

Sau khi hoàn tất, hãy mở tệp khối máy chủ tên miền và bao gồm đoạn mã letsencrypt.conf như dưới đây:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-av Available / example.com

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

Tạo một liên kết tượng trưng đến thư mục sites-enabled để kích hoạt khối máy chủ tên miền:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Khởi động lại dịch vụ Nginx để các thay đổi có hiệu lực:

sudo systemctl restart nginx

Bây giờ bạn đã sẵn sàng để lấy các tệp chứng chỉ SSL bằng cách chạy lệnh sau:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Nếu chứng nhận SSL được lấy thành công, thông báo sau sẽ được in trên thiết bị đầu cuối của bạn:

IMPORTANT NOTES: IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-02-22. 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" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Chỉnh sửa khối máy chủ tên miền và bao gồm các tệp chứng chỉ SSL như sau:

sudo nano /etc/nginx/sites-available/example.com /etc/nginx/sites-av Available / example.com

server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }

Cấu hình trên cho Nginx chuyển hướng từ HTTP sang HTTPS và từ www sang phiên bản không có www.

Khởi động lại hoặc tải lại dịch vụ Nginx để các thay đổi có hiệu lực:

sudo systemctl restart nginx

Mở trang web của bạn bằng https:// và bạn sẽ thấy biểu tượng khóa màu xanh lá cây.

Tự động gia hạn Hãy mã hóa chứng chỉ SSL

Chứng chỉ của Encrypt có hiệu lực trong 90 ngày. Để tự động gia hạn các chứng chỉ trước khi chúng hết hạn, gói certbot tạo ra một cronjob chạy hai lần một ngày và tự động gia hạn bất kỳ chứng chỉ nào 30 ngày trước khi hết hạn.

Khi gia hạn, dịch vụ nginx phải được tải lại để máy chủ tải chứng chỉ. Nối --renew-hook "systemctl reload nginx" vào tệp /etc/cron.d/certbot để nó trông như thế này:

sudo nano /etc/cron.d/certbot /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 quá trình gia hạn tự động, bằng cách chạy lệnh này:

sudo certbot renew --dry-run

Nếu không có lỗi, điều đó có nghĩa là quá trình gia hạn đã thành công.

Phần kết luận

Có một chứng chỉ SSL là điều bắt buộc ngày nay. Nó bảo vệ trang web của bạn, tăng vị trí xếp hạng SERP và cho phép bạn bật HTTP / 2 trên máy chủ web của mình.

Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách tạo và gia hạn chứng chỉ SSL bằng cách sử dụng tập lệnh certbot. Chúng tôi cũng đã chỉ cho bạn cách định cấu hình Nginx để sử dụng chứng chỉ.

Để tìm hiểu thêm về Certbot, hãy truy cập tài liệu của Certbot.

nginx debian hãy mã hóa certbot ssl