Giới thiệu

Hãy mã hóa là một Certificate Authority (CA) mới cung cấp một cách dễ dàng để có được và cài đặt các chứng chỉ TLS / SSL miễn phí, qua đó cho phép HTTPS được mã hóa trên các máy chủ web. Nó đơn giản hóa quy trình bằng cách cung cấp ứng dụng khách phần mềm, certbot (trước đây được gọi là letsencrypt), cố gắng tự động hóa hầu hết (nếu không phải tất cả) các bước cần thiết. Hiện tại, toàn bộ quá trình lấy và cài đặt chứng chỉ hoàn toàn tự động chỉ trên các máy chủ web Apache. Tuy nhiên, Let's Encrypt có thể được sử dụng để dễ dàng có được chứng chỉ SSL miễn phí, có thể được cài đặt thủ công, bất kể bạn chọn phần mềm máy chủ web nào.

Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn cách sử dụng Let's Encrypt để lấy chứng chỉ SSL miễn phí và sử dụng nó với Nginx trên Debian 8. Chúng tôi cũng sẽ cho bạn biết cách tự động gia hạn chứng chỉ SSL của bạn. Nếu bạn đang chạy một máy chủ web khác, chỉ cần làm theo tài liệu của máy chủ web của bạn để tìm hiểu cách sử dụng chứng chỉ với thiết lập của bạn.

Nginx with Let's Encrypt TLS/SSL Certificate and Auto-renewal

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

Trước khi làm theo hướng dẫn này, bạn sẽ cần một vài thứ.

Bạn nên có máy chủ Debian 8 với người dùng không phải root sudo đặc quyền. Bạn có thể tìm hiểu cách thiết lập tài khoản người dùng như vậy bằng cách thực hiện theo thiết lập máy chủ ban đầu cho hướng dẫn Debian 8.

Nếu bạn chưa cài đặt Nginx trên máy chủ của mình, hãy làm như vậy bằng cách làm theo hướng dẫn này.

Bạn phải sở hữu hoặc kiểm soát tên miền đã đăng ký mà bạn muốn sử dụng chứng chỉ. Nếu bạn chưa có tên miền đã đăng ký, bạn có thể đăng ký tên miền với một trong nhiều công ty đăng ký tên miền (ví dụ: Namecheap, GoDaddy, v.v.).

Nếu bạn chưa có, hãy đảm bảo tạo Bản ghi trỏ tên miền của bạn đến địa chỉ IP công cộng của máy chủ của bạn (nếu bạn đang sử dụng DNS của DigitalOcean, bạn có thể theo dõi hướng dẫn này). Điều này là bắt buộc vì cách mã hóa của chúng tôi xác nhận rằng bạn sở hữu miền mà nó đang cấp chứng chỉ cho. Ví dụ: nếu bạn muốn lấy chứng chỉ cho example.com, tên miền đó phải giải quyết cho máy chủ của bạn để quá trình xác thực hoạt động. Thiết lập của chúng tôi sẽ sử dụng example.comwww.example.com như tên miền, vì vậy cả hai bản ghi DNS là bắt buộc.

Một khi bạn có tất cả các điều kiện tiên quyết trên đường đi, hãy chuyển sang cài đặt phần mềm Hãy mã hóa máy khách.

Bước 1: Cài đặt Certbot, chương trình Let's Encrypt Client

Bước đầu tiên để sử dụng Let's Encrypt để lấy chứng chỉ SSL là cài đặt certbot Hãy mã hóa máy khách trên máy chủ của bạn.

Các certbot gói không có sẵn khi Debian 8 được phát hành. Để truy cập certbot gói, chúng tôi sẽ phải kích hoạt kho lưu trữ backbox Jessie trên máy chủ của chúng tôi. Kho lưu trữ này có thể được sử dụng để cài đặt các phiên bản phần mềm mới hơn so với các phiên bản được bao gồm trong các kho lưu trữ ổn định.

Thêm kho lưu trữ backports vào máy chủ của bạn bằng cách gõ:

echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list

Sau khi thêm kho lưu trữ mới, hãy cập nhật apt chỉ mục gói để tải xuống thông tin về các gói mới:

sudo apt-get update

Khi kho lưu trữ được cập nhật, bạn có thể cài đặt certbot gói bằng cách nhắm mục tiêu kho lưu trữ backports:

Chú thích: Khi sử dụng backport, bạn chỉ nên cài đặt các gói cụ thể mà bạn yêu cầu, thay vì sử dụng kho lưu trữ để cập nhật chung. Các gói Backport có bảo đảm tương thích ít hơn so với các kho lưu trữ chính.

Để tránh vô tình cài đặt hoặc cập nhật các gói bằng kho lưu trữ này, bạn phải chuyển -t gắn cờ với tên kho lưu trữ để cài đặt các gói từ backport.

sudo apt-get install certbot -t jessie-backports

Các certbot khách hàng bây giờ đã sẵn sàng để sử dụng.

Bước 2: Nhận chứng chỉ SSL

Hãy mã hóa cung cấp nhiều cách để có được chứng chỉ SSL, thông qua các plugin khác nhau. Không giống như các plugin Apache, được bao phủ trong một hướng dẫn khác, hầu hết các plugin sẽ chỉ giúp bạn có được chứng chỉ mà bạn phải định cấu hình máy chủ web của mình theo cách thủ công để sử dụng. Plugin chỉ có chứng chỉ và không cài đặt chúng, được gọi là "trình xác thực" vì chúng được sử dụng để xác thực xem máy chủ có được cấp chứng chỉ hay không.

Chúng tôi sẽ chỉ cho bạn cách sử dụng Webroot plugin để có được chứng chỉ SSL.

Cách sử dụng Plugin Webroot

Plugin Webroot hoạt động bằng cách đặt một tệp đặc biệt trong /.well-known trong thư mục gốc tài liệu của bạn, có thể được mở (thông qua máy chủ web của bạn) bằng dịch vụ Hãy mã hóa để xác thực. Tùy thuộc vào cấu hình của bạn, bạn có thể cần phải cho phép rõ ràng quyền truy cập vào /.well-known danh mục.

Nếu bạn chưa cài đặt Nginx, hãy làm như vậy bằng cách làm theo hướng dẫn này. Tiếp tục bên dưới khi bạn hoàn tất.

Để đảm bảo rằng thư mục có thể truy cập vào Let's Encrypt để xác nhận hợp lệ, hãy thay đổi nhanh chóng cấu hình Nginx của chúng ta. Theo mặc định, nó nằm ở /etc/nginx/sites-available/default. Chúng tôi sẽ sử dụng nano để chỉnh sửa nó:

sudo nano /etc/nginx/sites-available/default

Bên trong khối máy chủ, thêm khối vị trí này:

Add to SSL server block

        location ~ /.well-known {
                allow all;
        }

Bạn cũng sẽ muốn tìm kiếm những gì gốc tài liệu của bạn được thiết lập bằng cách tìm kiếm root chỉ thị, vì đường dẫn là bắt buộc để sử dụng plugin Webroot. Nếu bạn đang sử dụng tệp cấu hình mặc định, gốc sẽ là /var/www/html.

Lưu và thoát.

Kiểm tra cấu hình của bạn để tìm lỗi cú pháp:

sudo nginx -t

Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nếu không tìm thấy lỗi, khởi động lại Nginx bằng lệnh này:

sudo systemctl restart nginx

Bây giờ chúng ta đã biết webroot-path, chúng tôi có thể sử dụng plugin Webroot để yêu cầu chứng chỉ SSL với các lệnh này. Ở đây, chúng tôi cũng chỉ định tên miền của chúng tôi với -d Tùy chọn. Nếu bạn muốn một cert duy nhất làm việc với nhiều tên miền (ví dụ: example.comwww.example.com), hãy chắc chắn bao gồm tất cả chúng. Ngoài ra, hãy đảm bảo rằng bạn thay thế các phần được đánh dấu bằng đường dẫn webroot thích hợp và (các) tên miền:

sudo certbot certonly -a webroot --webroot-path=/var/www/html -d example.com -d www.example.com

Sau certbot khởi tạo, bạn sẽ được nhắc nhập email của bạn và đồng ý với các điều khoản dịch vụ Hãy mã hóa. Sau đó, thử thách sẽ chạy. Nếu mọi thứ đã thành công, bạn sẽ thấy một thông báo đầu ra trông giống như sau:

Output:IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert
   will expire on 2017-09-05. 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 lose your account credentials, you can recover through
   e-mails sent to sammy@example.com.
 - 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ạn sẽ muốn lưu ý đường dẫn và ngày hết hạn của chứng chỉ, được đánh dấu trong đầu ra ví dụ.

Tường lửa Lưu ý: Nếu bạn nhận được một lỗi như Failed to connect to host for DVSNI challenge, tường lửa của máy chủ của bạn có thể cần phải được định cấu hình để cho phép lưu lượng truy cập TCP trên cổng 80443.

Chú thích: Nếu miền của bạn đang định tuyến thông qua dịch vụ DNS như CloudFlare, bạn sẽ cần tạm thời vô hiệu hóa nó cho đến khi bạn nhận được chứng chỉ.

Tệp chứng chỉ

Sau khi nhận được chứng chỉ, bạn sẽ có các tệp được mã hóa PEM sau:

  • cert.pem: Chứng chỉ miền của bạn
  • chain.pem: Chứng chỉ chuỗi mã hóa Let's Encrypt
  • fullchain.pem: cert.pemchain.pem kết hợp
  • privkey.pem: Khóa cá nhân của chứng chỉ của bạn

Điều quan trọng là bạn phải biết vị trí của các tệp chứng chỉ vừa được tạo, vì vậy bạn có thể sử dụng chúng trong cấu hình máy chủ web của mình. Bản thân các tập tin được đặt trong một thư mục con trong /etc/letsencrypt/archive. Tuy nhiên, Let's Encrypt tạo liên kết tượng trưng cho các tệp chứng chỉ gần đây nhất trong /etc/letsencrypt/live/your_domain_name danh mục. Bởi vì các liên kết sẽ luôn trỏ đến các tệp chứng chỉ gần đây nhất, đây là đường dẫn mà bạn nên sử dụng để tham chiếu đến các tệp chứng chỉ của mình.

Bạn có thể kiểm tra xem các tệp có tồn tại hay không bằng cách chạy lệnh này (thay thế trong tên miền của bạn):

sudo ls -l /etc/letsencrypt/live/your_domain_name

Đầu ra phải là bốn tệp chứng chỉ được đề cập trước đó. Trong giây lát, bạn sẽ định cấu hình máy chủ web của mình để sử dụng fullchain.pem dưới dạng tệp chứng chỉ và privkey.pem dưới dạng tệp khóa chứng chỉ.

Tạo nhóm Diffie-Hellman mạnh

Để tăng cường bảo mật hơn, bạn cũng nên tạo một nhóm Diffie-Hellman mạnh. Để tạo nhóm 2048 bit, hãy sử dụng lệnh sau:

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

Quá trình này có thể mất vài phút nhưng khi hoàn tất, bạn sẽ có nhóm DH mạnh tại /etc/ssl/certs/dhparam.pem.

Bước 3: Định cấu hình TLS / SSL trên Máy chủ Web (Nginx)

Bây giờ bạn đã có chứng chỉ SSL, bạn cần cấu hình máy chủ web Nginx của bạn để sử dụng nó.

Chúng tôi sẽ thực hiện một số điều chỉnh đối với cấu hình của chúng tôi:

  1. Chúng tôi sẽ tạo đoạn mã cấu hình chứa khóa SSL và vị trí tệp chứng chỉ của chúng tôi.
  2. Chúng tôi sẽ tạo đoạn mã cấu hình chứa cài đặt SSL mạnh có thể được sử dụng với bất kỳ chứng chỉ nào trong tương lai.
  3. Chúng tôi sẽ điều chỉnh các khối máy chủ Nginx để xử lý các yêu cầu SSL và sử dụng hai đoạn mã trên.

Phương pháp cấu hình Nginx này sẽ cho phép chúng ta giữ các khối máy chủ sạch và đặt các phân đoạn cấu hình chung vào các mô-đun có thể tái sử dụng.

Tạo một đoạn mã cấu hình trỏ đến khóa SSL và chứng chỉ

Trước tiên, hãy tạo đoạn mã cấu hình Nginx mới trong /etc/nginx/snippets danh mục.

Để phân biệt đúng mục đích của tệp này, chúng tôi sẽ đặt tên cho nó ssl- theo sau là tên miền của chúng tôi, tiếp theo là .conf cuối cùng:

sudo nano /etc/nginx/snippets/ssl-example.com.conf

Trong tệp này, chúng tôi chỉ cần đặt ssl_certificate chỉ thị cho tệp chứng chỉ của chúng tôi và ssl_certificate_key vào khóa được liên kết. Trong trường hợp của chúng ta, nó sẽ trông như sau:

/etc/nginx/snippets/ssl-example.com.conf

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Khi bạn đã thêm các dòng đó, hãy lưu và đóng tệp.

Tạo một đoạn mã cấu hình với cài đặt mã hóa mạnh

Tiếp theo, chúng tôi sẽ tạo một đoạn mã khác sẽ xác định một số cài đặt SSL. Điều này sẽ thiết lập Nginx với bộ mã hóa SSL mạnh mẽ và cho phép một số tính năng nâng cao giúp bảo mật máy chủ của chúng tôi.

Các thông số chúng tôi sẽ thiết lập có thể được tái sử dụng trong các cấu hình Nginx trong tương lai, vì vậy chúng tôi sẽ cung cấp cho tệp một tên chung:

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

Để thiết lập SSL Nginx một cách an toàn, chúng tôi sẽ sử dụng các đề xuất của Remy van Elst trên Cipherli.st trang web. Trang web này được thiết kế để cung cấp các cài đặt mã hóa dễ sử dụng cho phần mềm phổ biến. Bạn có thể đọc thêm về các quyết định của mình liên quan đến lựa chọn Nginx đây.

Chú thích: Cài đặt được đề xuất mặc định trên Cipherli.st cung cấp bảo mật mạnh mẽ. Đôi khi, điều này đi kèm với chi phí tương thích với khách hàng lớn hơn. Nếu bạn cần hỗ trợ khách hàng cũ hơn, có một danh sách thay thế có thể được truy cập bằng cách nhấp vào liên kết trên liên kết có nhãn "Có, hãy cho tôi một ciphersuite hoạt động với phần mềm cũ / cũ".

Danh sách tương thích có thể được sử dụng thay vì các đề xuất mặc định trong cấu hình bên dưới. Việc chọn cấu hình bạn sử dụng sẽ phụ thuộc phần lớn vào những gì bạn cần để hỗ trợ.

Vì mục đích của chúng tôi, chúng tôi có thể sao chép toàn bộ cài đặt được cung cấp. Chúng tôi chỉ cần thực hiện một vài sửa đổi nhỏ.

Đầu tiên, chúng tôi sẽ thêm trình phân giải DNS ưa thích của chúng tôi cho các yêu cầu ngược dòng. Chúng tôi sẽ sử dụng Google cho hướng dẫn này. Chúng tôi cũng sẽ tiếp tục và thiết lập ssl_dhparam thiết lập để trỏ đến tệp Diffie-Hellman mà chúng tôi đã tạo trước đó.

Cuối cùng, bạn nên dành một chút thời gian để đọc Bảo mật truyền tải nghiêm ngặt HTTP hoặc HSTSvà cụ thể về chức năng "tải trước". Tải trước HSTS cung cấp bảo mật tăng lên, nhưng có thể có hậu quả sâu rộng nếu vô tình bật hoặc bật không chính xác. Trong hướng dẫn này, chúng tôi sẽ không tải trước các cài đặt, nhưng bạn có thể sửa đổi điều đó nếu bạn chắc chắn rằng bạn hiểu được các tác động:

/etc/nginx/snippets/ssl-params.conf

# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

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

Lưu và đóng tệp khi bạn hoàn tất.

Điều chỉnh cấu hình Nginx để sử dụng SSL

Bây giờ chúng ta có đoạn trích của mình, chúng ta có thể điều chỉnh cấu hình Nginx của mình để kích hoạt SSL.

Chúng tôi sẽ giả định trong hướng dẫn này rằng bạn đang sử dụng default tệp chặn máy chủ trong /etc/nginx/sites-available danh mục. Nếu bạn đang sử dụng một tệp khối máy chủ khác, hãy thay thế tên của nó trong các lệnh dưới đây.

Trước khi chúng ta tiếp tục, hãy sao lưu tệp khối máy chủ hiện tại của chúng ta:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

Bây giờ, hãy mở tệp khối máy chủ để thực hiện điều chỉnh:

sudo nano /etc/nginx/sites-available/default

Bên trong, khối máy chủ của bạn có thể bắt đầu như thế này:

/etc/nginx/sites-available/default

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration

    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;

    . . .

Chúng tôi sẽ sửa đổi cấu hình này để các yêu cầu HTTP không được mã hóa được tự động chuyển hướng đến HTTPS được mã hóa. Điều này mang lại sự bảo mật tốt nhất cho các trang web của chúng tôi. Nếu bạn muốn cho phép cả lưu lượng HTTP và HTTPS, hãy sử dụng cấu hình thay thế sau.

Chúng tôi sẽ chia cấu hình thành hai khối riêng biệt. Sau hai lần đầu tiên listen chỉ thị, chúng tôi sẽ thêm server_name chỉ thị, được đặt thành tên miền của máy chủ của bạn. Sau đó chúng tôi sẽ thiết lập một chuyển hướng đến khối máy chủ thứ hai mà chúng tôi sẽ tạo. Sau đó, chúng tôi sẽ đóng khối ngắn này:

/etc/nginx/sites-available/default

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

    # SSL configuration

    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;

    . . .

Tiếp theo, chúng ta cần phải bắt đầu một khối máy chủ mới ngay bên dưới để chứa cấu hình còn lại. Chúng tôi có thể bỏ ghi chú cho cả hai listen chỉ thị sử dụng cổng 443. Sau đó, chúng tôi chỉ cần bao gồm hai tệp đoạn mã mà chúng tôi đã thiết lập:

Chú thích: Bạn chỉ có thể có một listen chỉ thị bao gồm default_server sửa đổi cho mỗi phiên bản IP và kết hợp cổng. Nếu bạn có các khối máy chủ khác được bật cho các cổng có default_server đặt, bạn phải xóa công cụ sửa đổi khỏi một trong các khối.

/etc/nginx/sites-available/default

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

server {

    # SSL configuration

    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;

    . . .

Lưu và đóng tệp khi bạn hoàn tất.

(Cấu hình thay thế) Cho phép cả lưu lượng HTTP và HTTPS

Nếu bạn muốn hoặc cần cho phép cả nội dung được mã hóa và không được mã hóa, bạn sẽ phải định cấu hình Nginx hơi khác một chút. Điều này thường không được khuyến khích nếu nó có thể tránh được, nhưng trong một số trường hợp, nó có thể là cần thiết. Về cơ bản, chúng tôi chỉ nén hai khối máy chủ riêng biệt thành một khối và xóa chuyển hướng:

/etc/nginx/sites-available/default

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name example.com www.example.com;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;

    . . .

Lưu và đóng tệp khi bạn hoàn tất.

Bước 4: Điều chỉnh tường lửa

Nếu bạn đã bật tường lửa, bạn cần phải điều chỉnh cài đặt để cho phép lưu lượng truy cập SSL. Quy trình được yêu cầu phụ thuộc vào phần mềm tường lửa bạn đang sử dụng. Nếu bạn chưa có cấu hình tường lửa, vui lòng bỏ qua.

UFW

Nếu bạn đang sử dụng ufw, bạn có thể xem cài đặt hiện tại bằng cách nhập:

sudo ufw status

Nó có thể sẽ giống như thế này, có nghĩa là chỉ lưu lượng HTTP được phép cho máy chủ web:

OutputStatus: active

To                         Action      From
--                         ------      ----
SSH                        ALLOW       Anywhere
WWW                        ALLOW       Anywhere
SSH (v6)                   ALLOW       Anywhere (v6)
WWW (v6)                   ALLOW       Anywhere (v6)

Ngoài ra, hãy cho phép lưu lượng HTTPS, chúng tôi có thể cho phép cấu hình "WWW Full" và sau đó xóa phụ cấp hồ sơ "WWW" dư thừa:

sudo ufw allow 'WWW Full'

sudo ufw delete allow 'WWW'

Trạng thái của bạn sẽ trông giống như sau:

sudo ufw status

OutputStatus: active

To                         Action      From
--                         ------      ----
SSH                        ALLOW       Anywhere
WWW Full                   ALLOW       Anywhere
SSH (v6)                   ALLOW       Anywhere (v6)
WWW Full (v6)              ALLOW       Anywhere (v6)

Yêu cầu HTTPS giờ đây sẽ được máy chủ của bạn chấp nhận.

IPTables

Nếu bạn đang sử dụng iptables, bạn có thể xem các quy tắc hiện tại bằng cách nhập:

sudo iptables -S

Nếu bạn đã bật bất kỳ quy tắc nào, chúng sẽ được hiển thị. Một cấu hình ví dụ có thể trông như thế này:

Output-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Các lệnh cần thiết để mở lưu lượng SSL sẽ phụ thuộc vào các quy tắc hiện tại của bạn. Đối với một quy tắc cơ bản được thiết lập như quy tắc trên, bạn có thể thêm quyền truy cập SSL bằng cách nhập:

sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Nếu chúng ta xem xét lại các quy tắc tường lửa, chúng ta sẽ thấy quy tắc mới:

sudo iptables -S

Output-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Nếu bạn đang sử dụng chương trình để tự động áp dụng iptables quy tắc khi khởi động, bạn sẽ muốn đảm bảo rằng bạn cập nhật cấu hình của mình với quy tắc mới.

Bước 5: Bật các thay đổi trong Nginx

Bây giờ chúng ta đã thực hiện các thay đổi và điều chỉnh tường lửa của mình, chúng ta có thể khởi động lại Nginx để thực hiện các thay đổi mới của chúng ta.

Trước tiên, chúng ta nên kiểm tra để đảm bảo rằng không có lỗi cú pháp trong tệp của chúng tôi. Chúng ta có thể làm điều này bằng cách gõ:

sudo nginx -t

Nếu mọi thứ thành công, bạn sẽ nhận được kết quả như sau:

Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nếu đầu ra của bạn khớp với ở trên, tệp cấu hình của bạn không có lỗi cú pháp. Chúng tôi có thể khởi động lại Nginx một cách an toàn để thực hiện các thay đổi của chúng tôi:

sudo systemctl restart nginx

Chứng chỉ Let's Encrypt TLS / SSL hiện đã sẵn sàng và tường lửa hiện cho phép lưu lượng truy cập đến cổng 80 và 443. Tại thời điểm này, bạn nên kiểm tra chứng chỉ TLS / SSL hoạt động bằng cách truy cập tên miền của bạn qua HTTPS trong trình duyệt web.

Bạn có thể sử dụng Báo cáo SSL Labs của Qualys để xem điểm cấu hình máy chủ của mình như thế nào:

In a web browser:https://www.ssllabs.com/ssltest/analyze.html?d=example.com

Quá trình này có thể mất vài phút để hoàn thành. Thiết lập SSL trong hướng dẫn này sẽ báo cáo ít nhất một A Xêp hạng.

Bước 6: Thiết lập Tự động gia hạn

Chứng chỉ mã hóa của Let có giá trị trong 90 ngày, nhưng bạn nên gia hạn chứng chỉ sau mỗi 60 ngày để cho phép biên độ lỗi. Tại thời điểm viết bài này, tự động gia hạn vẫn không có sẵn như là một tính năng của chính máy khách, nhưng bạn có thể gia hạn bằng tay bằng cách chạy ứng dụng Mã hóa của khách hàng bằng renew Tùy chọn.

Để kích hoạt quá trình gia hạn cho tất cả các miền đã cài đặt, hãy chạy lệnh sau:

sudo certbot renew

Vì gần đây chúng tôi đã cài đặt chứng chỉ, lệnh này sẽ chỉ kiểm tra ngày hết hạn và in thông báo cho biết chứng chỉ không phải do gia hạn. Đầu ra sẽ trông giống như sau:

Output:Saving debug log to /var/log/letsencrypt/example.com.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/example.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.

Lưu ý rằng nếu bạn đã tạo chứng chỉ được nhóm với nhiều tên miền, chỉ tên miền cơ sở mới được hiển thị trong đầu ra, nhưng việc gia hạn phải hợp lệ cho tất cả các tên miền được bao gồm trong chứng chỉ này.

Một cách thực tế để đảm bảo các chứng chỉ của bạn không bị lỗi thời là tạo một công việc cron sẽ định kỳ thực thi lệnh gia hạn tự động cho bạn. Do việc gia hạn đầu tiên kiểm tra ngày hết hạn và chỉ thực hiện gia hạn nếu chứng chỉ còn ít hơn 30 ngày kể từ ngày hết hạn, nên việc tạo một công việc cron chạy hàng tuần hoặc thậm chí mỗi ngày là an toàn.

Hãy chỉnh sửa crontab để tạo một công việc mới sẽ chạy lệnh gia hạn mỗi tuần. Để chỉnh sửa crontab cho người dùng root, hãy chạy:

sudo crontab -e

Nếu đây là lần đầu tiên bạn sử dụng crontab, bạn có thể được yêu cầu chọn trình soạn thảo văn bản ưa thích của mình. Nếu bạn không có sở thích mạnh, nano là một lựa chọn dễ dàng.

Thêm các dòng sau:

crontab entry30 2 * * * /usr/bin/certbot renew --noninteractive --renew-hook "/bin/systemctl reload nginx" >> /var/log/le-renew.log

Lưu và thoát. Điều này sẽ tạo ra một công việc cron mới sẽ thực thi certbot renew lệnh mỗi ngày lúc 2:30 sáng và tải lại Nginx nếu chứng chỉ được gia hạn. Đầu ra được tạo ra bởi lệnh sẽ được chuyển đến một tệp nhật ký nằm tại /var/log/le-renewal.log.

Chú thích: Để biết thêm thông tin về cách tạo và lên lịch các công việc cron, bạn có thể kiểm tra Cách sử dụng Cron để tự động hóa tác vụ trong VPS hướng dẫn.

Phần kết luận

Đó là nó! Máy chủ web của bạn hiện đang sử dụng chứng chỉ Tự động mã hóa TLS / SSL miễn phí để phân phối nội dung HTTPS một cách an toàn.