Cách tạo chứng chỉ SSL trên Nginx cho Ubuntu 14.04
TLS , hay transport layer security và SSL tiền nhiệm của nó, 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 truy cập bình thường trong một lớp bao bọc được mã hóa, được bảo vệ.Sử dụng công nghệ này, các server có thể gửi lưu lượng truy cập giữa server và client một cách an toàn mà không lo ngại rằng các thông điệp sẽ bị chặn và đọc bởi bên ngoài. Hệ thống certificate cũng hỗ trợ user xác minh danh tính của các trang web mà họ đang kết nối.
Trong hướng dẫn này, ta sẽ chỉ cho bạn cách cài đặt certificate SSL tự ký để sử dụng với web server Nginx trên server Ubuntu 14.04. Chứng chỉ tự ký sẽ không xác thực danh tính server của bạn cho user của bạn vì nó không được ký bởi một trong những tổ chức phát hành certificate tin cậy của trình duyệt web của họ, nhưng nó sẽ cho phép bạn mã hóa thông tin liên lạc với ứng dụng client web của bạn .
Lưu ý: Bạn có thể cần xem xét sử dụng Let's Encrypt thay vì certificate tự ký. Let's Encrypt là tổ chức phát hành certificate mới cung cấp certificate SSL / TLS miễn phí được tin cậy trong hầu hết các trình duyệt web. Xem hướng dẫn để bắt đầu: Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 14.04
Yêu cầu
Để bắt đầu hướng dẫn này, bạn cần cài đặt một số thứ cơ bản trên server của bạn .
Bạn nên có sẵn một user không phải root có quyền sudo
. Bạn có thể tìm hiểu cách cài đặt một account user như vậy theo các bước 1-4 trong cài đặt server ban đầu của ta cho Ubuntu 14.04 .
Sau đó, bạn cũng cần cài đặt web server Nginx. Nếu bạn muốn cài đặt toàn bộ LEMP (Linux, Nginx, MySQL, PHP) trên server của bạn , bạn có thể làm theo hướng dẫn của ta về cách cài đặt LEMP trên Ubuntu 14.04 .
Nếu bạn chỉ muốn web server Nginx, bạn có thể chỉ cần nhập:
sudo apt-get update sudo apt-get install nginx
Bước một - Tạo certificate SSL
Ta có thể bắt đầu bằng cách tạo một folder sẽ được sử dụng để lưu giữ tất cả thông tin SSL của ta . Ta nên tạo điều này trong folder cấu hình Nginx:
sudo mkdir /etc/nginx/ssl
Bây giờ ta đã có vị trí để đặt file của bạn , ta có thể tạo khóa SSL và file certificate trong một chuyển động bằng lệnh :
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
Bạn sẽ được hỏi một loạt câu hỏi. Trước khi xem xét điều đó, hãy xem điều gì đang xảy ra trong lệnh mà ta đang phát hành:
- openssl : Đây là công cụ dòng lệnh cơ bản để tạo và quản lý certificate OpenSSL, khóa và các file khác.
- req : Lệnh con này chỉ định rằng ta muốn sử dụng quản lý yêu cầu ký certificate (CSR) X.509. “X.509” là tiêu chuẩn cơ sở hạ tầng public key mà SSL và TLS tuân theo để quản lý khóa và certificate của nó. Ta muốn tạo một certificate X.509 mới, vì vậy ta đang sử dụng lệnh con này.
- -x509 : Điều này sửa đổi thêm lệnh con trước đó bằng cách nói với tiện ích rằng ta muốn tạo certificate tự ký thay vì tạo yêu cầu ký certificate , như thường lệ.
- -nodes : Điều này yêu cầu OpenSSL bỏ qua tùy chọn bảo mật certificate của ta bằng passphrase (password bảo vệ) . Ta cần Nginx để có thể đọc file mà không cần sự can thiệp của user , khi server khởi động. Passphrase (password bảo vệ) sẽ ngăn điều này xảy ra vì ta sẽ phải nhập passphrase (password bảo vệ) sau mỗi lần khởi động lại.
- -days 365 : Tùy chọn này đặt khoảng thời gian mà certificate sẽ được coi là hợp lệ. Ta đặt nó trong một năm ở đây.
- -newkey rsa: 2048 : Điều này chỉ định rằng ta muốn tạo certificate mới và khóa mới cùng một lúc. Ta đã không tạo khóa bắt buộc phải ký certificate ở bước trước, vì vậy ta cần tạo khóa cùng với certificate . Phần
rsa:2048
yêu cầu nó tạo một khóa RSA dài 2048 bit. - -keyout : Dòng này cho OpenSSL biết nơi đặt file private key đã tạo mà ta đang tạo.
- -out : Điều này cho OpenSSL biết nơi đặt certificate mà ta đang tạo.
Như ta đã nêu ở trên, các tùy chọn này sẽ tạo cả file khóa và certificate . Ta sẽ được hỏi một số câu hỏi về server của ta để nhúng thông tin một cách chính xác vào certificate .
Điền vào các dấu nhắc một cách thích hợp. Dòng quan trọng nhất là dòng yêu cầu Common Name (eg server FQDN or YOUR name)
. Bạn cần nhập domain mà bạn muốn liên kết với server của bạn . Thay vào đó, bạn có thể nhập địa chỉ IP công cộng nếu bạn chưa có domain .
Toàn bộ dấu nhắc sẽ trông giống như sau:
<pre>
Tên quốc gia (mã gồm 2 chữ cái) [AU]: <span class = “highlight”> US </span>
Tên Tiểu bang hoặc Tỉnh (tên đầy đủ) [Một số Tiểu bang]: <span class = “highlight”> New York </span>
Tên local (ví dụ: city ) []: <span class = “highlight”> Thành phố New York </span>
Tên tổ chức (ví dụ: công ty) [Internet Widgits Pty Ltd]: <span class = “highlight”> Bouncy Castles, Inc. </span>
Tên đơn vị tổ chức (ví dụ: section) []: <span class = “highlight”> Bộ trượt nước </span>
Tên chung (ví dụ: server FQDN hoặc tên BẠN) []: <span class = “highlight”> your domain.com </span>
Địa chỉ Email []: <span class = “highlight”> admin @ your domain.com </span>
</pre>
Cả hai file bạn đã tạo sẽ được đặt trong folder /etc/nginx/ssl
.
Bước hai - Cấu hình Nginx để sử dụng SSL
Ta đã tạo các file khóa và certificate của bạn trong folder cấu hình Nginx. Bây giờ ta chỉ cần sửa đổi cấu hình Nginx của bạn để tận dụng những lợi thế này bằng cách điều chỉnh các file khối server của ta . Bạn có thể tìm hiểu thêm về các khối server Nginx trong bài viết này.
Nginx version 0.7.14 trở lên (Ubuntu 14.04 xuất xưởng với version 1.4.6) có thể bật SSL trong cùng một khối server như truy cập HTTP thông thường. Điều này cho phép ta cấu hình quyền truy cập vào cùng một trang web theo cách ngắn gọn hơn nhiều.
Khối server của bạn có thể trông giống như sau:
<pre>
người phục vụ {
nghe 80 server mặc định ;
nghe [::]: 80 server mặc định ipv6only = on;
root /usr/share/nginx/html; index index.html index.htm; server_name your_domain.com; location / { try_files $uri $uri/ =404; }
}
</pre>
Điều duy nhất ta cần làm để SSL hoạt động trên cùng một khối server này, trong khi vẫn cho phép các kết nối HTTP thông thường, là thêm một dòng sau:
<pre>
người phục vụ {
nghe 80 server mặc định ;
nghe [::]: 80 server mặc định ipv6only = on;
<span class="highlight">listen 443 ssl;</span> root /usr/share/nginx/html; index index.html index.htm; server_name <span class="highlight">your_domain.com</span>; <span class="highlight">ssl_certificate /etc/nginx/ssl/nginx.crt;</span> <span class="highlight">ssl_certificate_key /etc/nginx/ssl/nginx.key;</span> location / { try_files $uri $uri/ =404; }
}
</pre>
Khi bạn hoàn tất, hãy lưu file .
Bây giờ, tất cả những gì bạn phải làm là khởi động lại Nginx để sử dụng cài đặt mới của bạn :
sudo service nginx restart
Thao tác này sẽ reload cấu hình trang web , giờ đây cho phép nó phản hồi cả yêu cầu HTTP và HTTPS (SSL).
Bước 3 - Kiểm tra cài đặt của bạn
Trang web bây giờ sẽ có chức năng SSL, nhưng ta nên kiểm tra nó đảm bảo .
Đầu tiên, hãy kiểm tra đảm bảo rằng ta vẫn có thể truy cập trang web bằng cách sử dụng HTTP bình thường. Trong trình duyệt web , truy cập domain hoặc địa chỉ IP của server :
<pre>
<span class = “highlight”> http </span>: // <span class = “highlight”> tên domain server hoặc_IP </span>
</pre>
Bạn sẽ thấy trang web bình thường của bạn . Trong ví dụ của tôi, tôi chỉ phục vụ trang Nginx mặc định:
Nếu bạn nhận được trang này, thì server của bạn vẫn đang xử lý chính xác các yêu cầu HTTP.
Bây giờ, ta có thể kiểm tra xem server của ta có thể sử dụng SSL để giao tiếp hay không. Thực hiện việc này bằng cách chỉ định giao thức https
thay vì giao thức http
.
<pre>
<span class = “highlight”> https </span>: // <span class = “highlight”> tên domain server hoặc_IP </span>
</pre>
Bạn có thể sẽ nhận được một cảnh báo trong trình duyệt web của bạn trông giống như sau:
Điều này được mong đợi. Nó cho bạn biết rằng nó không thể xác minh danh tính của server mà bạn đang cố gắng kết nối vì nó không được ký bởi tổ chức phát hành certificate mà trình duyệt đã được cấu hình để tin cậy. Vì ta đã tạo certificate tự ký nên điều này hoàn toàn hợp lý.
Nhấp vào “Vẫn tiếp tục”, “Tiếp tục” hoặc bất kỳ tùy chọn tương tự nào khả dụng. Bạn sẽ thấy lại trang web của bạn :
Trình duyệt của bạn có thể hiển thị "https" bị gạch chéo trên thanh địa chỉ hoặc biểu tượng "khóa" bị đứt đoạn hoặc bị gạch chéo. Nếu bạn nhấp vào biểu tượng ổ khóa, bạn có thể xem thêm một số thông tin về kết nối:
Như bạn thấy , vấn đề chỉ là trình duyệt không thể xác minh danh tính của server vì nó không được tổ chức phát hành certificate ký mà nó được cấu hình để tin cậy. Tuy nhiên, phần giữa cho thấy rằng kết nối đã được mã hóa, vì vậy ta đã đạt được mục tiêu đó.
Kết luận
Bạn đã cấu hình server Nginx của bạn để xử lý cả yêu cầu HTTP và SSL. Điều này sẽ giúp bạn giao tiếp với khách hàng một cách an toàn và tránh các bên ngoài có thể đọc được lưu lượng truy cập của bạn.
Nếu bạn đang lên kế hoạch sử dụng SSL cho một trang web công cộng, có lẽ bạn nên mua certificate SSL từ một tổ chức phát hành certificate tin cậy để ngăn những cảnh báo đáng sợ hiển thị cho mỗi khách truy cập của bạn.
<div class = “author”> Bởi Justin Ellingwood </div>
Các tin liên quan
Cách tạo chứng chỉ SSL trên Nginx cho Ubuntu 14.042014-05-09
Cách cài đặt Nginx trên Ubuntu 14.04 LTS
2014-04-29
Cách thiết lập server block Nginx (server ảo) trên Ubuntu 14.04 LTS
2014-04-25
Cách tùy chỉnh tên server Nginx của bạn sau khi biên dịch từ nguồn trong CentOS
2014-02-11
Cách triển khai ứng dụng Rails bằng Passenger với Nginx trên CentOS 6.5
2014-01-29
Cách triển khai ứng dụng Rails bằng Unicorn và Nginx trên CentOS 6.5
2014-01-29
Cách thêm module ngx_pagespeed vào Nginx trong Debian Wheezy
2014-01-15
Cách cấu hình cài đặt trang web WordPress đơn và nhiều trang với Nginx
2013-11-26
Cách triển khai ứng dụng Node.js bằng Systemd và Nginx
2013-11-26
Cách thiết lập server block Nginx trên Debian 7
2013-10-30