TLS, hoặc transport layer security và SSL viết tắt của lớp cổng bảo mật, là các giao thức web được sử dụng để bọc lưu lượng bình thường trong một trình bao bọc được mã hóa, được bảo vệ.
Sử dụng công nghệ này, máy chủ có thể gửi lưu lượng truy cập an toàn giữa máy chủ và máy khách mà không có khả năng bị chặn bởi các bên bên ngoài. Hệ thống chứng chỉ cũng hỗ trợ người dùng xác minh danh tính của các trang web mà họ đang kết nối.
Bài viết sẽ hướng dẫn bạn cách thiết lập chứng chỉ SSL tự ký để sử dụng với máy chủ web Nginx trên máy chủ Debian 9.
Lưu ý: Chứng chỉ tự ký sẽ mã hóa giao tiếp giữa máy chủ của bạn và bất kỳ máy khách nào. Tuy nhiên, vì nó không được ký bởi bất kỳ cơ quan cấp chứng chỉ đáng tin cậy nào có trong trình duyệt web, người dùng không thể sử dụng chứng chỉ để xác thực danh tính máy chủ của bạn một cách tự động.
Chứng chỉ tự ký có thể phù hợp nếu bạn không có tên miền liên kết với máy chủ của mình và trong trường hợp giao diện web được mã hóa không phải là giao diện người dùng. Nếu bạn làm có một tên miền, trong nhiều trường hợp nó là tốt hơn để sử dụng một chứng chỉ CA-ký. Để tìm hiểu cách thiết lập một chứng chỉ đáng tin cậy miễn phí với dự án Let's Encrypt, hãy tham khảo “Làm thế nào để bảo mật Nginx bằng Let's Encrypt trên Debian 9”.
Trước khi bắt đầu, bạn nên user không phải root được cấu hình với đặc quyền sudo
.
Bạn cũng cần phải cài đặt máy chủ web Nginx. Nếu bạn muốn cài đặt toàn bộ LEMP (Linux, Nginx, MySQL, PHP) trên máy chủ của bạn, bạn có thể làm theo hướng dẫn của Chúng ta về việc thiết lập LEMP trên Debian 9.
Khi bạn đã hoàn thành các điều kiện tiên quyết, hãy tiếp tục thực hiện các bước bên dưới.
TLS/SSL hoạt động bằng cách sử dụng kết hợp chứng chỉ công khai và khóa cá nhân. Khóa SSL được giữ bí mật trên máy chủ. Nó được sử dụng để mã hóa nội dung gửi cho khách hàng. Chứng chỉ SSL được chia sẻ công khai với bất kỳ ai yêu cầu nội dung. Nó có thể được sử dụng để giải mã nội dung được ký bởi khóa SSL liên quan.
Chúng ta có thể tạo một cặp khóa và chứng chỉ tự ký với OpenSSL trong một lệnh duy nhất:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Bạn sẽ được hỏi một loạt câu hỏi. Trước khi chúng ta đi qua đó, chúng ta hãy xem những gì đang xảy ra trong lệnh mà chúng ta đang phát hành:
rsa:2048
phần nói với nó để thực hiện một khóa RSA đó là dài 2048 bit.Như đã nói ở trên, các tùy chọn này sẽ tạo cả file khóa và chứng chỉ.
Điền vào các lời nhắc thích hợp. Dòng quan trọng nhất là dòng yêu cầu Common Name (e.g. server FQDN or YOUR name)
. Bạn cần phải nhập tên miền được liên kết với máy chủ của bạn hoặc, có nhiều khả năng là địa chỉ IP công cộng của máy chủ của bạn.
Toàn bộ các lời nhắc sẽ tương tự như sau:
Output
Country Name (2 letter code) [AU]:
US
State or Province Name (full name) [Some-State]:
New York
Locality Name (eg, city) []:
New York City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Bouncy Castles, Inc.
Organizational Unit Name (eg, section) []:
Ministry of Water Slides
Common Name (e.g. server FQDN or YOUR name) []:
server_IP_address
Email Address []:
admin@your_domain.com
Cả hai file bạn đã tạo sẽ được đặt trong các thư mục con thích hợp của thư mục /etc/ssl
.
Trong khi chúng ta đang sử dụng OpenSSL, chúng ta cũng nên tạo ra một nhóm Diffie-Hellman mạnh, được sử dụng trong việc thương lượng Perfect Forward Secrecy với clients.
Chúng ta có thể làm điều này bằng cách gõ:
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
Quá trình này sẽ mất một lúc, nhưng khi hoàn tất, bạn sẽ có một nhóm DH mạnh mẽ /etc/nginx/dhparam.pem
mà Chúng ta có thể sử dụng trong cấu hình của mình.
Chúng ta đã tạo các file chứng chỉ và khóa của Chúng ta trong /etc/ssl
thư mục. Bây giờ chúng ta chỉ cần sửa đổi cấu hình Nginx của chúng ta để tận dụng chúng.
Chúng ta sẽ thực hiện một số điều chỉnh đối với cấu hình của mình.
1. Tạo đoạn mã cấu hình chứa khóa SSL và vị trí file chứng chỉ.
2. 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. Đ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.
Đầu tiên, hãy tạo một đoạn mã cấu hình Nginx mới trong /etc/nginx/snippets
thư mục.
Để phân biệt đúng mục đích của file này, hãy gọi nó self-signed.conf
:
sudo nano /etc/nginx/snippets/self-signed.conf
Trong file này, Chúng ta cần đặt ssl_certificate
chỉ thị cho file chứng chỉ của Chúng ta và ssl_certificate_key
cho 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/self-signed.conf
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
Khi bạn đã thêm các dòng đó, hãy lưu và đóng file.
Tiếp theo, chúng ta 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ác thông số 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 ta sẽ cung cấp cho file 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 ta sẽ sử dụng các đề xuất của Remy van Elst trên trang Cipherli.st. 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ổ biến phần mềm.
Các cài đặt được đề xuất trên trang web được liên kết ở trên 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 Click vào liên kết trên trang 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 đó có thể được thay thế cho các mục được sao chép 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ợ. Cả hai đều sẽ cung cấp bảo mật tuyệt vời.
Vì mục đích của Chúng ta, Chúng ta có thể sao chép toàn bộ cài đặt được cung cấp. Chúng ta chỉ cần thực hiện một vài sửa đổi nhỏ.
Đầu tiên, Chúng ta sẽ thêm trình phân giải DNS ưa thích của Chúng ta cho các yêu cầu ngược dòng. Chúng ta sẽ sử dụng Google cho hướng dẫn này.
Thứ hai, Chúng ta sẽ nhận xét ra dòng đặt tiêu đề bảo mật giao thông nghiêm ngặt. Trước khi bỏ ghi chú dòng này, bạn nên dành một chút thời gian để đọc về HTTP Strict Transport Security hoặc HSTS , đặc biệt 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.
Sao chép thông tin sau vào ssl-params.conf
file đoạn mã của bạn :
/etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable strict transport security for now. You can uncomment the following
# line if you understand the implications.
# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
Vì chúng ta đang sử dụng chứng chỉ tự ký, nên việc đóng ghim SSL sẽ không được sử dụng. Nginx sẽ xuất cảnh báo nhưng tiếp tục hoạt động chính xác.
Lưu và đóng file khi bạn hoàn tất.
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 ta sẽ giả định trong hướng dẫn này rằng bạn đang sử dụng file cấu hình khối máy chủ tùy chỉnh trong /etc/nginx/sites-available
thư mục. Chúng ta sẽ sử dụng /etc/nginx/sites-available/example.com
cho ví dụ này. Thay thế tên file cấu hình của bạn nếu cần.
Trước khi Chúng ta tiếp tục, hãy sao lưu file cấu hình hiện tại của Chúng ta:
sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com.bak
Bây giờ, hãy mở file cấu hình để thực hiện điều chỉnh:
sudo nano /etc/nginx/sites-available/example.com
Bên trong, khối máy chủ của bạn có thể bắt đầu tương tự như sau:
/etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
server_name
example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
. . .
}
Tập tin của bạn có thể theo một thứ tự khác nhau, và thay vì root
và index
chỉ bạn có thể có một số location
, proxy_pass
hoặc báo cáo cấu hình tùy chỉnh khác. Điều này là ok, vì Chúng ta chỉ cần cập nhật các listen
chỉ thị và bao gồm các đoạn mã SSL. Chúng ta sẽ sửa đổi khối máy chủ hiện tại này để phục vụ lưu lượng SSL trên cổng 443, sau đó tạo một khối máy chủ mới để phản hồi trên cổng 80 và tự động chuyển hướng lưu lượng truy cập đến cổng 443.
Lưu ý: Chúng ta sẽ sử dụng chuyển hướng 302 cho đến khi xác minh rằng mọi thứ đang hoạt động bình thường. Sau đó, chúng ta có thể thay đổi điều này thành chuyển hướng 301 vĩnh viễn.
Trong file cấu hình hiện có của bạn, hãy cập nhật hai listen
câu lệnh để sử dụng cổng 443 và SSL, sau đó bao gồm hai file đoạn mã mà chúng ta đã tạo trong các bước trước:
/etc/nginx/sites-available/example.com
server {
listen
443 ssl;
listen [::]:
443 ssl;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
server_name
example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
. . .
}
Tiếp theo, dán một khối máy chủ thứ hai vào file cấu hình, sau dấu ngoặc đóng ( }
) của khối đầu tiên:
/etc/nginx/sites-available/example.com
. . .
server {
listen 80;
listen [::]:80;
server_name
example.com www.example.com;
return 302 https://$server_name$request_uri;
}
Đây là cấu hình xương trần lắng nghe trên cổng 80 và thực hiện chuyển hướng đến HTTPS.
Lưu và đóng file khi bạn hoàn tất chỉnh sửa file.
» Tin mới nhất:
» Các tin khác: