Bảo mật kết nối VPN – Phần 2: Tạo và ký certificate cho OpenVPN server/client trên Ubuntu 22.04 LTS

Kết thúc nội dung Giải ngố Linux – Phần 10: Thiết lập Certificate Authority – CA trên Ubuntu 22.04 LTS, giờ là lúc tôi sẽ chuyển sang phần xử lý cho OpenVPN Server chạy trên Ubuntun 22.04 LTS như đã đề cập nhiều lần trước đó.

Do việc cấu hình và thiết lập OpenVPN Server khá lê thê, do vậy, tôi sẽ cần chia ra công tác này ra thành một số kỳ. Ở kỳ này, tôi sẽ tập trung vào việc tạo và ký certificate cho OpenVPN server/client với các đầu mục chính bao gồm:

  • Cài đặt OpenVPNEasy-RSA;
  • Khởi tạo Public Key Infrastructure – PKI;
  • Tạo Private keyCertificate request cho OpenVPN server/client;
  • Ký các Certificate request cho OpenVPN Server/Client;

Ngoài ra, tôi cũng sẽ điều chỉnh tiêu đề cho phù hợp, vì từ kỳ này, các nội dung thực chất là phần cập nhật của bài Hướng dẫn tạo VPN Server miễn phí từ A đến Z – Phần 4: Tạo Private Key và ký Certificate cho VPN Server, VPN Client và cấu hình OpenVPN Server (và cũng có thể xem là phần tiếp theo của nội dung Bảo mật kết nối VPN – Phần 1: Đặc quyền khi tự quản lý VPN Server).

#1. Cài đặt OpenVPN và Easy-RSA

Quá trình cài cắm OpenVPNEasy-RSA trên OpenVPN server khá đơn giản với các command:

sudo apt update

sudo apt install openvpn easy-rsa

Lưu ý: Mục đích cài đặt openvpn thì quá rõ ràng rồi. Còn vai trò của easy-rsa thì vẫn tương tự như kỳ trước, là công cụ để hỗ trợ quản lý Public Key Infrastructure – PKI.

#2. Khởi tạo Public Key Infrastructure – PKI cho OpenVPN

Và cũng tương tự kỳ trước, để phục vụ cho việc khởi tạo Public Key Infrastructure – PKI, trước hết tôi cần tạo thư mục easy-rsa. Sau đó tiến hành tạo symbolic link từ thư mục easy-rsa đến easy-rsa package files đã cài đặt ở Mục 1 ( /usr/share/easy-rsa/* trong trường hợp này).

mkdir ~/easy-rsa

ln -s /usr/share/easy-rsa/* ~/easy-rsa/

Lưu ý: Vụ này tôi giới thiệu kỹ ở kỳ trước rồi nên không nhắc lại ở đây nữa. Nếu cần thiết, bạn có thể quay lại nội dung Giải ngố Linux – Phần 10: Thiết lập Certificate Authority – CA trên Ubuntu 22.04 LTS để xem cho rõ.

Tiếp tục, tôi tiến hành phân quyền tương ứng cho thư mục easy-rsa

chmod 700 ~/easy-rsa

ls -la ~/easy-rsa/

easy-rsa directory
easy-rsa directory

Tại thư mục easy-rsa, tôi cũng sẽ cần cập nhật nội dung tương ứng cho file vars. Với OpenVPN server, nội dung file vars sẽ tương đối gọn nhẹ hơn so với CA server.

cd ~/easy-rsa

nano vars

set_var EASYRSA_ALGO "ec"

set_var EASYRSA_DIGEST "sha512"

cat vars

vars file
vars file

Lưu ý:

Đến đây tôi đã có thể bắt đầu khởi tạo cái Public Key Infrastructure – PKI và kiểm tra kết quả với các command:

./easyrsa init-pki

ls -la pki

init-pki
init-pki

#3. Tạo Private key và Certificate request cho OpenVPN Server

Để tạo private keycertificate request cho OpenVPN server, tại thư mục easy-rsa tôi sẽ chạy command:

./easyrsa gen-req server

Quá trình xử lý tiếp theo sẽ yêu cầu tôi xác nhận (hoặc điều chỉnh) thông tin Common Name (tôi để tạm là server nhưng khi làm thật thì bạn nhớ đặt tên cho nghiêm chỉnh vào) và nhập passphrase tương ứng nhằm tăng mức độ bảo mật. Nhằm đơn giản hóa quá trình demo, tôi sẽ sử dụng option nopass để bỏ qua cái passphrase như phần minh hoạ sau đây.

easyrsa gen-req server
easyrsa gen-req server

Tôi xác nhận tình hình khởi tạo private key (server.key trong trường hợp bên dưới) và certificate request (server.req trong trường hợp bên dưới) với các command:

ls -la pki/private/

ls -la pki/reqs/

Tiếp theo, tôi hốt cái private key (server.key) vừa mới khởi tạo bỏ qua thư mục /etc/openvpn/server/.

sudo cp /home/test1/easy-rsa/pki/private/server.key /etc/openvpn/server/

Đến đây, tôi đã có thể mang cái server certificate request (server.req) sang cho CA server ký. Tuy nhiên, để thuận tiện, tôi sẽ tạo luôn cái client certificate request luôn rồi mới mang qua cho CA server ký.

#4. Tạo Private key và Certificate request cho OpenVPN client

Về cơ bản, tôi có thể tạo private keycertificate requets trên client machine rồi gửi qua cho CA server ký. Tuy nhiên, để tiện múc nhiều client mà không phải chuyển file tới lui nhiều lần, tôi có thể tạo script để xử lý kiểu “công nghiệp hóa, hiện đại hóa” trên OpenVPN server.

Với phương án này, tôi khởi tạo thư mục ~/client-configs/keys trên OpenVPN server để chứa key/certificate và thực hiện phân quyền tương ứng.

mkdir -p ~/client-configs/keys

Lưu ý: -p flag sẽ xử lý nested directories (tức là tạo thư mục cha nếu cần thiết)

chmod -R 700 ~/client-configs

Kế tiếp, tôi cũng quay lại thư mục easy-rsa để tạo client certificate request với Common Name tương ứng.

cd ~/easy-rsa

./easyrsa gen-req client1

easyrsa gen-req client1
easyrsa gen-req client1

Lưu ý: Tôi đặt đại Common Nameclient1 cho nhanh. Tùy thuộc nhu cầu thực tế bạn nên đặt tên cho phù hợp, đừng phang đại theo kiểu tôi demo. Ngoài ra, ở trên tôi cũng sử dụng option nopass để demo cho nhanh.

Tương tự, tôi cũng copy cái client private key mới tạo client1.key bỏ qua ~/client-configs/keys.

cp pki/private/client1.key ~/client-configs/keys/

Đến đây, tôi đã sẵn sàng cho việc ký các certificate request trên CA server.

#5. Ký certificate request cho OpenVPN server/client

Quá trình này sẽ bao gồm các bước:

  • Chuyển các certificate request của OpenVPN server (req) và client (client1.req) qua CA server;
  • Import và sign các certificate request này trên CA server;
  • Chuyển các signed certificateCA server certificate (crt) về OpenVPN server.
  • Bố trí signed certificateCA server certificate (crt) vào vị trí phù hợp trên OpenVPN server.

#5.1 Chuyển các certificate request sang CA server

Ở đây có thể có nhiều phương án để chuyển file, nhưng vì đã thiết lập ssh đến CA server trước đó nên tôi có thể sử dụng command sau để đẩy hàng qua CA server (thư mục /tmp như minh họa bên dưới).

Chuyển server certificate request với command:

scp /home/test1/easy-rsa/pki/reqs/server.req test@192.168.64.133:/tmp

Tương tự, tôi cũng chuyển cái client certificate request với command sau:

scp /home/test1/easy-rsa/pki/reqs/client1.req test@192.168.64.133:/tmp

Lưu ý:

  • Việc thiết lập ssh tôi đã đề cập trong nội dung Giải ngố Linux – Phần 9: Thiết lập firewall và cấu hình ssh trên Ubuntu 22.04 LTS;
  • Bạn có thể chạy command để chuyển cùng lúc cả 2 cái certificate request. Ở đây tôi tách ra để tiện theo dõi (nhất là khi cần bổ sung thêm client);
  • OpenVPN serverCA server mà tôi đang sử dụng demo là các Virtual Machines được thiết lập chung đường mạng nên tôi quất private IP nó vẫn chạy ầm ầm. Nếu chưa hình dung rõ thì bạn xem lại nội dung Giải ngố Linux – Phần 7: Cài đặt Ubuntu 22.04 LTS trên VMware;
  • Trường hợp nếu OpenVPN server của bạn đang nằm chàng hảng ở trên đám Cloud nào đấy (ví dụ GCP, AWS), bạn có thể bay qua con CA server chạy scp command trỏ đến public IP tương ứng của OpenVPN server (với điều kiện đã thiết lập cho phép kết nối phù hợp).

#5.2 Import, sign các certificate request trên CA server và chuyển về OpenVPN server

Sau khi đẩy hàng đi, tôi cũng nhảy qua con CA server (ssh với user test) để kiểm tra với các command:

ssh test@192.168.64.133

cd ~/easy-rsa

ls -l /tmp

#5.2.1 Với OpenVPN server

Một khi đã xác nhận việc chuyển hàng thành công tốt đẹp, tôi tiến hành import và sign cái server certificate request vừa mới gửi sang với các command:

./easyrsa import-req /tmp/server.req server

./easyrsa sign-req server server

import and sign server certificate request
import and sign server certificate request

Lưu ý: Bạn sẽ cần xác nhận thông tin và cung cấp passphrase đã thiết lập tương ứng (nếu có).

Cái certificate đã được CA server ký (server.crt) sẽ nằm ở pki/issued. Tôi kiểm tra hàng lại với các command:

ls -l pki/issued/

ls -l pki | grep ca.crt

Kế đến, tôi sẽ hốt cái server.crt này và cả cái ca.crt mang về OpenVPN server.

scp pki/ca.crt test1@192.168.64.132:/tmp

scp pki/issued/server.crt test1@192.168.64.132:/tmp

#5.2.2 Với OpenVPN client

Tương tự, một khi đã xác nhận việc chuyển hàng thành công tốt đẹp, tôi tiến hành import và sign cái client certificate request vừa mới gửi sang với các command:

./easyrsa import-req /tmp/client1.req client1

./easyrsa sign-req client client1

import and sign server certificate request
import and sign server certificate request

Sau đó gửi cái certificate đã được CA server ký (client1.crt) mang về OpenVPN server.

scp pki/issued/client1.crt test1@192.168.64.132:/tmp

# 5.3 Bố trí các signed certificate và CA server certificate (ca.crt) trên OpenVPN server

Xong việc trên CA server, tôi quay xe nhảy về OpenVPN server để bố trí hàng đã nhận được vào các vị trí thích hợp.

Với OpenVPN server, tôi sẽ cần hốt 2 cái file tương ứng là server.crt ca.crt bỏ vô thư mục /etc/openvpn/server.

sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

Với OpenVPN client, tôi sẽ cần hốt 2 cái file tương ứng là client1.crt ca.crt bỏ vô ~/client-configs/keys.

cp /tmp/{client1.crt,ca.crt} ~/client-configs/keys/

Đến đây coi như tôi đã hoàn thành công tác tạo và ký các certificate cho OpenVPN server/client. Kỳ tới tôi sẽ bắt đầu chuyển sang nội dung thiết lập cấu hình cho OpenVPN server.

1 thought on “Bảo mật kết nối VPN – Phần 2: Tạo và ký certificate cho OpenVPN server/client trên Ubuntu 22.04 LTS”

Leave a Reply

Your email address will not be published. Required fields are marked *