Thứ ba, 23/06/2015 | 00:00 GMT+7

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 elliptic prime256v1 .
  • 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:

/ etc / nginx / sites-enable / default
... # 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 .

  1. Đầ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:
etc / nginx / sites-enable / default
server {     # listen 80 default_server;     # listen [::]:80 default_server; 
  1. Sau đó, bỏ comment listen đầu tiên bên dưới SSL Configuration bằng cách xóa dấu thăng. Thụt lề đúng cách và cũng xóa ssl default_server .
/ etc / nginx / sites-enable / default
    # SSL Configuration     #     listen 443;     # listen [::]:443 ssl default_server;     # 
  1. 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ó đọc server_name your_server_ip .

  2. Sau server_name , hãy thêm khóa SSL và đường dẫn certificate của bạn.

/ etc / nginx / sites-enable / default
        ssl on;         ssl_certificate /etc/nginx/ssl/nginx.pem;         ssl_certificate_key /etc/nginx/ssl/nginx.key; 
  1. Cuối cùng, thêm cài đặt SSL.
/ etc / nginx / sites-enable / default
        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.

/ etc / nginx / sites-enable / default
# 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 .


Tags:

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 client
2015-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