Cấu hình Vhost, SSl trên Nginx

With Nginx, it is very easy to configure your virtual host to use a secure connection.
Với Nginx, khá dễ dàng cấu hình virtual host để sử dụng HTTPS

Chế độ mặc định

Enabling SSL support for your site is very simple and involves the addition of just a few lines to the virtual host file.
Để bật SSL cho website của bạn thật đơn giản bằng cách bạn chỉ cần thêm vào một vài dòng ở trong Virtualhost file.

Mở virutal host file:

sudo nano /etc/nginx/sites-available/bantron.vn

Ví dụ file virutal host của tôi sẽ được cấu hình như sau:

server {

listen 80;
server_name http://www.bantron.vn;
rewrite ^/(.*) http://www.bantron.vn/$1 permanent;

}

server {

listen 80;
server_name http://www.bantron.vn;

access_log /home/demo/public_html/www.bantron.vn/logs/access.log;
error_log /home/demo/public_html/www.bantron.vn/logs/error.log;

location / {

root /home/demo/public_html/www.bantron.vn/public/;
index index.html;

}

}

Port 443

Để sử dụng HTTPS webserver cần lắng nghe từ cổng 443:
Bạn cần chuyển từ cổng 80 sang cổng 443

server {

listen 80;
server_name http://www.bantron.vn;
rewrite ^/(.*) http://bantron.vn/$1 permanent;

}

server {

listen 80;
server_name bantron.vn;

access_log /home/demo/public_html/bantron.vn/logs/access.log;
error_log /home/demo/public_html/bantron.vn/logs/error.log;

location / {

root /home/demo/public_html/bantron.vn/public/;
index index.html;

}

}

server {

listen 443;
server_name http://www.bantron.vn;
rewrite ^/(.*) http://www.bantron.vn/$1 permanent;

}

server {

listen 443;
server_name http://www.bantron.vn;

access_log /home/demo/public_html/www.bantron.vn/logs/access.log;
error_log /home/demo/public_html/www.bantron.vn/logs/error.log;

location / {

root /home/demo/public_html/www.bantron.vn/public/;
index index.html;

}

}

Bạn đã xong bước 1

Certificate Location

Tiếp theo, bạn cần chỉ rõ đường dẫn của các file certificate. Như vậy bạn cần thêm những dòng sau vào trong virtualhost:

ssl on;
ssl_certificate /etc/ssl/certs/myssl.crt;
ssl_certificate_key /etc/ssl/private/myssl.key;

Sau khi thêm:

server {

listen 443;

ssl on;
ssl_certificate /etc/ssl/certs/myssl.crt;
ssl_certificate_key /etc/ssl/private/myssl.key;

server_name http://www.bantron.vn;
....
}

Khởi động lại Nginx:

sudo /etc/init.d/nginx restart

Advertisements

SSL certificates sử dụng với Nginx

Thư mục cài đặt mặc định
Trong Debian và Ubutu thư mục mặc định đặt certificates là /etc/ssl. Trong đó có 2 thư mục con là “cert” và “private”.
Trong bài viết này, tôi để các file tạo ra trong thư mục mặc định trên.
Home

Trước hết, bạn tạo thư mục tạm để lưu các file được sinh ra:

mkdir /home/demo/temp
...
cd /home/demo/temp

Sinh Mã
Đầu tiên, ta cần tạo khóa riêng( private key). Ở bước này, đòi hỏi bạn gõ 1 đoạn mã vào. Nhưng ta sẽ xóa nó ở bước sau:
openssl genrsa -des3 -out myssl.key 1024

Trong quá trình, bạn sẽ được yêu cầu gõ một đoạn mã tùy ý vào.

CSR

Bây giờ ta cần tạo ra một CSR (Certificate Signing Request):

openssl req -new -key myssl.key -out myssl.csr

Quá trình này yêu cầu bạn nhập một số thông tin:

Country Name: VN

State or Province Name: HaNoi

Locality Name: HaDong

Organization Name: Egos Ltd

Organizational Unit Name: Web Development

Common Name: http://www.bantron.vn

Email Address: webadmin@bantron.vn

Với các thuộc tính “extra” bạn có thể để trống.

Xóa đoạn mã (passphrase)

Khi sinh ra file myssl.key , bạn đã phải gõ vào một đoạn mã. Như vậy sẽ không thuận tiện, nếu như webserver khởi động lại, bạn sẽ phải nhập đoạn mã đó vào.Vấn đề sẽ trở nên nghiêm trọng nếu máy của bạn bị khởi động lại.

Cách đơn giản là ta bỏ đoạn mã đó đi.

cp myssl.key myssl.key.org
openssl rsa -in myssl.key.org -out myssl.key

Bạn sẽ được yêu cầu nhập đoạn mã vừa xong vào một lần nữa.

Bây giờ ta có các file sau:

ls
...
myssl.csr myssl.key myssl.key.org

CRT

Cuối cùng ta cần tạo file ssl certificate:

openssl x509 -req -days 365 -in myssl.csr -signkey myssl.key -out myssl.crt

Xong. Bây giờ bạn copy các file tương ứng vào thư mục /etc/ssl/

sudo cp myssl.crt /etc/ssl/certs/
sudo cp myssl.key /etc/ssl/private/

Clean up

Bạn kiểm tra ssl certificate và có thể xóa các file tạm đi.
Summary
Sau khi copy các file vào thư mục cần /etc/ssl/ , bạn đã có thể cấu hình Nginx để serve dịch vụ HTTPS.