Cách tạo chứng chỉ ECC trên Nginx cho Debian 8
Bài viết này giải thích cách tạo certificate SSL Elliptic Curve Cryptography (ECC) cho Nginx. Đến cuối hướng dẫn này, bạn sẽ có cơ chế mã hóa nhanh hơn để sử dụng trong production .Mật mã public key truyền thống dựa vào khả năng gần như không thể tính đến các số nguyên lớn. Mặt khác, ECC dựa vào sự bất khả thi của việc giải các đường cong elliptic ngẫu nhiên thành các hàm logarit rời rạc, một bài toán được gọi là "bài toán logarit rời rạc đường cong elliptic" hoặc ECDLP. Nói tóm lại, ECC cung cấp các khóa nhỏ hơn với độ bảo mật tương tự, và điều này chuyển thành hiệu suất mã hóa cao hơn, áp dụng cho các chữ ký số như SSL.
Hướng dẫn này và tất cả các certificate ECC, phụ thuộc vào một giao thức đường cong elliptic có thể có nhiều loại. Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) Suite B chỉ định hai đường cong elip tiềm năng để sử dụng, P-256 và P-384, còn gọi là prime256v1 và secp384r1. Để đơn giản, ta sẽ sử dụng trước đây, prime256v1, vì nó đơn giản nhưng thực tế.
Yêu cầu
Để làm theo hướng dẫn này, bạn cần :
- Một server Debian 8.1 mới
- User sudo không phải root, bạn có thể cài đặt theo các bước 2 và 3 của hướng dẫn này
- OpenSSL được cài đặt và cập nhật
Để kiểm tra, bạn cần một trong hai hệ thống, với OpenSSL được cài đặt và cập nhật:
- Một server Linux khác
- Hệ thống local dựa trên Linux (Mac, Ubuntu, Debian, v.v.)
Bước 1 - Cài đặt Nginx
Trong bước này, ta sẽ sử dụng một trình cài đặt gói tích apt-get
tên là apt-get
. Nó đơn giản hóa việc quản lý một cách đáng kể và tạo điều kiện cho việc cài đặt sạch sẽ.
Trong liên kết được chỉ định trong yêu cầu , bạn nên cập nhật apt-get
và cài đặt gói sudo
, vì không giống như các bản phân phối Linux khác, Debian 8 không được cài đặt sudo
.
Nginx là server HTTP đã nói ở trên, tập trung vào việc xử lý các tải lớn với mức sử dụng bộ nhớ thấp. Để cài đặt nó, hãy chạy như sau:
- sudo apt-get install nginx
Để biết thông tin về sự khác biệt giữa Nginx và Apache2, hai web server nguồn mở phổ biến nhất, hãy xembài viết này .
Bước 2 - Tạo folder
Phần này đơn giản và ngắn gọn. Ta cần lưu trữ private key và certificate ở một vị trí dễ nhớ, vì vậy ta cần tạo một folder mới.
- sudo mkdir /etc/nginx/ssl
Bước 3 - Tạo certificate ECC tự ký
Trong phần này, ta sẽ yêu cầu một certificate mới và ký tên vào nó.
Đầu tiên, tạo private key ECC bằng công cụ ecparam
của OpenSSL.
- Cờ
out
hướng kết quả cho một file . Đối với hướng dẫn này, ta sẽ lưu khóa trong/etc/nginx/ssl/ nginx.key
. - Các
name
cờ xác định các đường cong ellipticprime256v1
.
- sudo openssl ecparam -out /etc/nginx/ssl/nginx.key -name prime256v1 -genkey
Sau đó, tạo một yêu cầu ký certificate .
- Cờ
key
chỉ định đường dẫn đến khóa của ta , được tạo trong lệnh trước đó. - Cờ
out
chỉ định đường dẫn đến certificate đã tạo của ta .
sudo openssl req -new -key /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/csr.pem
Việc gọi lệnh này sẽ dẫn đến một loạt các dấu nhắc .
- Tên chung : Chỉ định địa chỉ IP hoặc tên server của server của bạn.
- Challenge Mật khẩu: Đỗ không cung cấp một.
- Điền vào tất cả các trường khác theo quyết định của bạn . Nhấn
ENTER
để chấp nhận các giá trị mặc định.
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York Organization Name (eg, company) [Internet Widgits Pty Ltd]:Digital Ocean Tutorial Organizational Unit Name (eg, section) []:ECC Certificate Test Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []: webmaster@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Cuối cùng, tự ký xác nhận. Sau đó, certificate được sử dụng bởi client để mã hóa dữ liệu mà chỉ server mới có thể đọc được.
-
x509
là công cụ OpenSSL được sử dụng để tạo certificate . - Cờ
days
chỉ định thời gian certificate sẽ còn hiệu lực. Với ví dụ này, certificate sẽ tồn tại trong một năm. -
in
quy định cụ thể của ta trước đó tạo ra certificate request .
- sudo openssl req -x509 -nodes -days 365 -key /etc/nginx/ssl/nginx.key -in /etc/nginx/ssl/csr.pem -out /etc/nginx/ssl/nginx.pem
Đặt quyền đối với file để bảo vệ private key và certificate của bạn. Để biết thêm thông tin về mã quyền gồm ba chữ số, hãy xem hướng dẫn về quyền của Linux .
- sudo chmod 600 /etc/nginx/ssl/*
Chứng chỉ của bạn và private key bảo vệ nó hiện đã sẵn sàng để cài đặt .
Bước 4 - Cài đặt certificate
Trong phần này, ta sẽ cấu hình server ảo Nginx bằng khóa và certificate . Trên thực tế, server của ta sẽ bắt đầu phân phát HTTPS thay vì các yêu cầu HTTP.
Mở file cấu hình server bằng nano hoặc editor yêu thích của bạn.
- sudo nano /etc/nginx/sites-enabled/default
Ở đầu file cấu hình, bạn sẽ tìm thấy một khối mã, tương tự như sau:
... # Default server configuration # server { ... }
Một số chỉnh sửa tiếp theo sẽ được thực hiện bên trong khối server
.
- Đầu tiên, hãy comment hai dòng đầu tiên của khối
server
, bằng cách đặt trước dòng bằng dấu thăng:
server { # listen 80 default_server; # listen [::]:80 default_server;
- Sau đó, bỏ comment
listen
đầu tiên bên dướiSSL Configuration
bằng cách xóa dấu thăng. Thụt lề đúng cách và cũng xóassl default_server
.
# SSL Configuration # listen 443; # listen [::]:443 ssl default_server; #
Cập nhật folder root , ngay bên dưới khối đã comment . bản root đọc tên server
server_name _;
. Thay đổi nó để bao gồm ip server của bạn, để nó đọcserver_name your_server_ip
.Sau
server_name
, hãy thêm khóa SSL và đường dẫn certificate của bạn.
ssl on; ssl_certificate /etc/nginx/ssl/nginx.pem; ssl_certificate_key /etc/nginx/ssl/nginx.key;
- Cuối cùng, thêm cài đặt SSL.
ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL; ssl_prefer_server_ciphers on;
Kết quả cuối cùng của bạn phải giống như sau.
# Default server configuration # server { # listen 80 default_server; # listen [::]:80 default_server; # SSL configuration # listen 443; # listen [::]:443 ssl default_server; # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name your_server_ip; ssl on; ssl_certificate /etc/nginx/ssl/nginx.pem; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL; ssl_prefer_server_ciphers on; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; }
Khi những thay đổi này đã được thực hiện, hãy lưu và thoát ra khỏi file .
Khởi động lại Nginx để áp dụng các thay đổi.
- sudo service nginx restart
Bước 5 - Kiểm tra Nginx với ECC
Trong phần này, ta sẽ kiểm tra server , thông qua dòng lệnh. , điều này có thể được thực hiện trên (1) hệ thống dựa trên Linux local của bạn hoặc (2) một Server khác. Bạn cũng có thể chạy lệnh này từ cùng một cửa sổ shell, nhưng bạn có thể cần có bằng chứng thành công chắc chắn hơn.
Mở kết nối qua cổng HTTPS 443.
openssl s_client -connect your_server_ip :443
Cuộn đến giữa kết quả sau kết quả phím và bạn sẽ thấy như sau:
output--- SSL handshake has read 3999 bytes and written 444 bytes --- ... SSL-Session: ...
Tất nhiên, các con số có thể thay đổi, nhưng đây là thành công. Xin chúc mừng!
Nhấn CTRL+C
để thoát.
Bạn cũng có thể truy cập trang web của bạn trong trình duyệt web, sử dụng HTTPS trong URL ( https://example.com
). Trình duyệt của bạn sẽ cảnh báo bạn rằng certificate đã được tự ký. Bạn có thể xem certificate và xác nhận các chi tiết trùng với những gì bạn đã nhập ở Bước 4.
Kết luận
Phần này kết thúc hướng dẫn của ta , để lại cho bạn một server Nginx đang hoạt động, được cấu hình an toàn với certificate ECC. Để biết thêm thông tin về cách làm việc với OpenSSL, hãy xem bài viết Cơ bản về OpenSSL .
Các tin liên quan
Cách nâng cấp Nginx tại chỗ mà không làm rớt kết nối client2015-06-15
Cách cấu hình Nginx để sử dụng các trang lỗi tùy chỉnh trên Ubuntu 14.04
2015-06-05
Cách cấu hình Nginx để sử dụng các trang lỗi tùy chỉnh trên CentOS 7
2015-06-05
Cách chuyển hướng www sang không có www với Nginx trên CentOS 7
2015-05-04
Cách chuyển hướng www thành không có www với Nginx trên Ubuntu 14.04
2015-05-04
Cách triển khai ứng dụng Rails với Puma và Nginx trên Ubuntu 14.04
2015-04-01
Cách triển khai ứng dụng Rails với Unicorn và Nginx trên Ubuntu 14.04
2015-03-26
Cách cung cấp ứng dụng flask với Gunicorn và Nginx trên CentOS 7
2015-03-23
Cách cung cấp các ứng dụng Flask với Gunicorn và Nginx trên Ubuntu 14.04
2015-03-20
Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên CentOS 7
2015-03-20