How to build easy Certificate Authority
Date | 24-02-2022 |
---|---|
Author | Thanakorn P. |
วันนี้เราจะมาลองทำ Certificate Authority ง่ายๆ เพื่อใช้ Issue certificate สำหรับ lab ต่างๆ ของเรากันครับ
ทำการ install tool ต่างๆ เพื่อใช้งานเกี่ยวกับการ install easyrsa กัน
dnf install wget tar -y
จากนั้นทำการ Download package ของ easyrsa ที่อยู่บน github ด้วย command
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
จากนั้นทำการ Extract package ด้วย command
tar -xvf EasyRSA-3.0.8.tgz
เราก็จะได้ Directory EasyRSA-3.0.8 มา ให้ทำการ cd เข้าไปด้านใน
cd EasyRSA-3.0.8
จากนั้นทำการทำ Public key infrastructure โดย command
./easyrsa init-pki
จากนั้นทำการสร้าง Root CA โดย command
./easyrsa build-ca
easyrsa จะให้เราใส่ค่าดังนี้
Enter New CA Key Passphrase: [ใส่ Password ของ RootCA]
Re-Enter New CA Key Passphrase: [ใส่ Password เดียวกับ ด้านบน]
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: [ตั้งชื่อให้กับ Root CA ของเรา]
ลองทดสอบ Generate certificate เพื่อใช้กับ Server โดยจะมี common name ชื่อว่า nginx.thanakorn.local ใช้ command
./easyrsa build-server-full nginx.thanakorn.local nopass
จากนั้น easyrsa จะถาม passpharse ของ Root CA ที่เราได้ตั้งไว้
Enter pass phrase for /root/EasyRSA-3.0.8/pki/private/ca.key: [Password Root CA]
Certificate จะถูก Generate และวางไว้ที่ path /EasyRSA-3.0.8/pki/issued/ และ Key ของ Certificate จะถูกวางไว้ที่ที่ path /EasyRSA-3.0.8/pki/private/
ผมได้ทำการทดสอบ Certificate โดยนำไปใช้กับ nginx โดย เพิ่ม config ของ nginx ในส่วนของ https ดังนี้
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /usr/share/nginx/html;
ssl_certificate "/root/EasyRSA-3.0.8/pki/issued/nginx.thanakorn.local.crt";
ssl_certificate_key "/root/EasyRSA-3.0.8/pki/private/nginx.thanakorn.local.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
จากนั้นนำ Root CA Certificate ที่อยู่ใน path /EasyRSA-3.0.8/pki/ca.crt ไปติดตั้งที่เครื่อง client โดยผมใช้ MacOS ก็จะนำ root CA ไปที่ติดตั้งที่ keychain
และเนื่องจากไม่ได้มีการทำ DNS ให้กับ Nginx ผมเลยใช้วิธีการ Set hosts file ของเครื่อง เพื่อที่จะได้เข้าถึงเครื่อง nginx ผ่าน common name ที่เราเตรียมไว้ได้
เมื่อทำทั้ง 2 อย่างเสร็จเรียบร้อย เราก็ทำการทดสอบโดยการเข้า Nginx ผ่าน protocol https ก็จะเห็นว่า Certificate ที่เราทำการใช้งาน สามารถใช้งานได้ และสามารถทำให้ web browser trust certificate ที่ออกโดย Certificate Authority ของเราได้ตามภาพด้านล่างครับ