Android

Bảo mật nginx với mã hóa trên Ubuntu 18.04

Установка бесплатного SSL-сертификата (A-grade) Let's Encrypt на nginx (Ubuntu 16.04)

Установка бесплатного SSL-сертификата (A-grade) Let's Encrypt на nginx (Ubuntu 16.04)

Mục lục:

Anonim

Let Encrypt là một tổ chức chứng nhận mở và miễn phí được phát triển bởi Nhóm nghiên cứu bảo mật Internet (ISRG). Chứng chỉ được cấp bởi Let Encrypt được hầu hết các trình duyệt tin cậy ngày nay.

Trong hướng dẫn này, chúng tôi sẽ cung cấp hướng dẫn từng bước về cách bảo mật Nginx của bạn với Let Encrypt bằng công cụ certbot trên Ubuntu 18.04.

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

Hãy chắc chắn rằng bạn đã đáp ứng các điều kiện tiên quyết sau đây trước khi tiếp tục với hướng dẫn này:

  • Bạn có một tên miền trỏ đến IP máy chủ công cộng của bạn. Trong hướng dẫn này, chúng tôi sẽ sử dụng example.com . Bạn đã cài đặt Nginx bằng cách làm theo các hướng dẫn sau Bạn có một khối máy chủ cho tên miền của mình. Bạn có thể làm theo các hướng dẫn này để biết chi tiết về cách tạo một cái.

Cài đặt Certbot

Certbot là một công cụ đầy đủ tính năng và dễ sử dụng, có thể tự động hóa các tác vụ để lấy và làm mới Chứng chỉ SSL 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 Ubuntu mặc định.

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

sudo apt update sudo apt install certbot

Tạo nhóm Strong 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 Nếu bạn thích, bạn có thể thay đổi kích thước lên tới 4096 bit, nhưng trong trường hợp đó, 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 miền của chúng tôi, chúng tôi sẽ sử dụng plugin Webroot 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.

Để đơn giản hơn, 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 .

Các lệnh sau sẽ tạo thư mục và làm cho nó có thể ghi 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ã, hãy tạo hai đoạn mã sau mà chúng tôi sẽ đưa vào tất cả các tệp khối máy chủ Nginx của chúng tôi.

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; }

Tạo ssl.conf đoạn mã thứ hai, 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 vài 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 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;

Khi đoạn mã được tạo, hãy mở 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; }

Để kích hoạt tệp khối máy chủ mới, chúng ta cần tạo một liên kết tượng trưng từ tệp đến thư mục sites-enabled , được Nginx đọc trong khi khởi động:

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 có thể chạy Certbot với plugin webroot và lấy các tệp chứng chỉ SSL bằng cách phát hành:

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, certbot sẽ in thông báo sau:

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 2018-07-28. 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:

Bây giờ bạn có các tệp chứng chỉ, bạn có thể chỉnh sửa khối máy chủ tên miền của mình 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 }

Với cấu hình ở trên, chúng tôi đang buộc HTTPS và chuyển hướng từ www sang phiên bản không www.

Tải lại dịch vụ Nginx để các thay đổi có hiệu lực:

sudo systemctl reload nginx

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à sẽ tự động gia hạn bất kỳ chứng chỉ nào 30 ngày trước khi hết hạn.

Vì chúng tôi đang sử dụng trình cắm webrobot certbot sau khi chứng chỉ được gia hạn, chúng tôi cũng phải tải lại dịch vụ nginx. 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, bạn có thể sử dụng công tắc certbot --dry-run :

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

Trong hướng dẫn này, bạn đã sử dụng ứng dụng khách Encrypt, certbot để tải chứng chỉ SSL cho miền của mình. Bạn cũng đã tạo các đoạn Nginx để tránh sao chép mã và cấu hình Nginx để sử dụng chứng chỉ. Vào cuối hướng dẫn, bạn đã thiết lập một cronjob để gia hạn chứng chỉ tự động.

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

Bài đăng này là một phần của loạt bài hướng dẫn cách cài đặt-lemp-stack-on-ub Ubuntu-18-04.

Các bài viết khác trong loạt bài này:

• Cách cài đặt Nginx trên Ubuntu 18.04 • Cách thiết lập khối máy chủ Nginx trên Ubuntu 18.04 • Bảo mật Nginx bằng Let Encrypt trên Ubuntu 18.04 • Cách cài đặt MySQL trên Ubuntu 18.04 • Cách cài đặt PHP trên Ubuntu 18.04