การออกใบรับรอง เพื่อใช้งาน SSL โดยใช้ OpenSSL บน CentOS7

Introduction

ในบทความนี้เราจะใช้การออกใบรับรอง Self-sign SSL certificate โดยใช้ openssl บน CentOS ออกใบรับรอง หรือเรียกว่า Certificate Authority (CA) ซึ่งจะทำหน้าที่ในการออกใบรับรองให้กับผู้ที่เข้ามาขอใบรับรอง

ขั้นตอนการออกแบบใบรับรองดิจิตอล

1. สร้าง Private Key ให้กับ CA (cakey.pem) ให้กับ CA
2. ออกใบรับรองให้กับ CA เพื่อให้แอปพลิเคชันต่างๆ สามารถตรวจสอบความถูกต้องของ Key ได้ (cacert.crt)
3. นำไฟล์ CSR ที่ต้องการออกใบรับรอง ทำการเซ็นโดยใช้ Private Key และ CERT. ของ CA (cakey.pem,cacert.crt)
4. ได้ใบรับรองของ CA และใบรับรองที่เรานำมาเซ็น (example.crt)

CSR (Certificate Signing Requests ) เมื่อเราต้องการใช้งาน SSL Certificate สิ่งที่ต้องทำคือการสร้างไฟล์ CSR ขึ้นมา โดยในไฟล์ CSR จะระบุข้อมูล Public Key และข้อมูลเบื้องต้นของระบบของเรา ทีท่ต้องการใช้งาน SSL โดยข้อมูลทั้งสองส่วนจะถูกนำไปใช้เมื่อเรานำไปออกไปรับรองดิจิทัล

ตัวอย่างข้อมูลที่เราต้องกรอก เมื่อทำการสร้างไฟล์ CSR

Country Name (2 letter code) [AU]:TH
State or Province Name (full name) [Some-State]:Songkhla
Locality Name (eg, city) []:Hatyai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:AbleNet
Organizational Unit Name (eg, section) []:SE
Common Name (e.g. server FQDN or YOUR name) []:AbleNet.co.th
Email Address []:info@ablenet.co.th

.

ขั้นตอนการออกใบรับรอง

Step 1 : สร้างไฟล์และโฟลเดอร์ โดยใช้คำสั่งดังนี้

mkdir demoCA
cd demoCA
mkdir certs
mkdir newcerts
mkdir private
touch index.txt
echo 10 > serial
ตัวอย่างการพิมพ์คำสั่งและผลลัพธ์ที่ได้

Step 2 : สร้างไฟล์ CSR จากแอปพลิเคชันที่เราต้องการนำมาออกใบรับรอง ยกตัวอย่างการสร้างไฟล์ CSR บน Cisco Meeting Server (CMS)

ตัวอย่างการสร้างไฟล์ CSR

Step 3 : คัดลอกไฟล์ CSR ไปยังโฟลเดอร์ demoCA บน CentOS

คัดลอกไฟล์ CSR ไปยัง โฟลเดอร์ demoCA

Step 4 : คัดลอกไฟล์ openssl.cnf ไปยังโฟลเดอร์ demoCA

โดยไฟล์ไฟล์ openssl.cnf จะเก็บอยู่ที่ /System/etc/pki/tls/openssl.cnf
จากนั้นเปลี่ยนชื่อไฟล์จาก openssl.cnf เป็น openssl_local.cfg

คัดลอกไฟล์ openssl ไปไฟลเดอร์ demoCA และเปลี่ยนชื่อไฟล์

Step 5 : เปลี่ยนค่าในคอนฟิกในไฟล์ openssl_local.cfg ดังนี้

  • แก้ไขค่าในส่วนของ [CA_default] 
  • ลบเครื่องหมาย # ออกจากหน้าคำสั่ง “copy_extensions = copy” 
  • เปลี่ยนค่าจาก “policy = policy_match” เป็น “policy = policy_anything“
  • เปลี่ยนค่าจาก dir = /etc/pki/CA”  เป็น “dir = .” 
  • เปลี่ยนค่า “default_days = 365”  เป็น “default_days = 3650”

Step 6 : สร้าง Private Key ให้กับ CA โดยใช้คำสั่ง

openssl genrsa -aes256 -out private/cakey.pem 4096
การพิมพ์คำสั่ง และตัวอย่าง Private Key ที่ได้

ระบบจะให้ใส่รหัสผ่าน ให้เรากำหนดรหัสผ่านที่ต้องการ : รหัสผ่านดังกล่าวจะถูกใช้เมื่อเราทำการออกใบรับรอง

Step 7 : ออกใบรับรองสำหรับ CA

โดยใช้คำสั่งดังนี้ จากนั้นระบบจะถามรหัสผ่านของ Private Key ให้เราใส่รหัสผ่านที่เราได้สร้างไว้ใน Step 6

openssl req -new -x509 -days 3650 -key private/cakey.pem -config openssl_local.cfg -sha1 -extensions v3_ca -out cacert.crt

แสดงใบรับรองของ CA

Step 9 : เซ็นรับรองไฟล์ CSR (webadmin2.csr) ด้วย คำสั่งดังนี้

openssl ca -config openssl_local.cfg -cert cacert.pem -keyfile private/cakey.crt -in webadmin2.csr -out certs/webadmin2.crt -md sha1

ตัวอย่างข้อความที่แสดงบน Terminal ในขั้นตอนการออกใบรับรอง

Step 10 : ตรวจสอบใบรับรองที่เราทำการเซ็น

ใบรับรองที่ได้ จะอยู่ใน โฟลเดอร์ certs ซึ่งเราสามารถนำไฟล์ ดังกล่าวออกไปใช้งานกับระบบของเราได้เลย