Android

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

Установка бесплатного 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à 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.

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 cài đặt chứng chỉ SSL Encrypt SSL miễn phí trên CentOS 8 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

Trước khi bạn tiến hành, hãy chắc chắn rằng bạn đã đáp ứng các điều kiện tiên quyết sau:

  • Bạn có một tên miền trỏ đến IP công cộng của bạn. Chúng tôi sẽ sử dụng example.com . Bạn đã cài đặt Nginx trên máy chủ CentOS của mình. Tường lửa của bạn được định cấu hình để chấp nhận kết nối trên các cổng 80 và 443.

Cài đặt Certbot

Certbot là một công cụ dòng lệnh miễn phí giúp đơn giản hóa quy trình lấy và làm mới Chứng chỉ SSL mã hóa từ và tự động kích hoạt HTTPS trên máy chủ của bạn.

Gói certbot không được bao gồm trong kho CentOS 8 tiêu chuẩn, nhưng có thể tải xuống từ trang web của nhà cung cấp.

Chạy lệnh wget sau với tư cách là người dùng root hoặc sudo để tải tập lệnh certbot vào thư mục /usr/local/bin :

sudo wget -P /usr/local/bin

Khi quá trình tải xuống hoàn tất, hãy thực hiện tệp:

sudo chmod +x /usr/local/bin/certbot-auto

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.

Tạo một bộ tham số DH 2048 bit mới bằng cách gõ lệnh sau:

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

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 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.

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

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

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

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

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; 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;

Đoạn mã trên bao gồm các trình cắt được khuyến nghị 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.

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ư được hiển thị bên dưới:

/etc/nginx/conf.d/example.com

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

Tải lại cấu hình Nginx để các thay đổi có hiệu lực:

sudo systemctl reload nginx

Chạy công cụ certbot với plugin webroot để lấy các tệp chứng chỉ SSL cho miền của bạn:

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

Nếu đây là lần đầu tiên bạn gọi certbot , công cụ sẽ cài đặt các phụ thuộc bị thiếu.

Khi chứng chỉ 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 2020-03-12. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew" - 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:

/etc/nginx/conf.d/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 www sang phiên bản không www.

Cuối cùng, tải lại dịch vụ Nginx để các thay đổi có hiệu lực:

sudo systemctl reload nginx

Bây giờ, hãy 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 chứng chỉ trước khi chúng hết hạn, hãy tạo một cronjob sẽ 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.

Sử dụng lệnh crontab để tạo một cronjob mới:

sudo crontab -e

Dán dòng sau:

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

Lưu và đóng tập tin.

Để kiểm tra quá trình gia hạn, bạn có thể sử dụng lệnh certbot theo sau là công tắc --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ử nghiệm đã thành công.

Phần kết luận

Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách sử dụng ứng dụng khách Encrypt, certbot để tải xuống chứng chỉ SSL cho tên miền của bạn. Chúng tôi 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, chúng tôi đã thiết lập một cronjob để gia hạn chứng chỉ tự động.

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

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