[เนื้อหา] Manage SSL/TLS Certificate บน Linux
เราจะมาทำความเข้าใจเรื่องการใช้งาน certificate บน Linux กัน
[เนื้อหา] Manage SSL/TLS Certificate บน Linux
เราจะมาทำความเข้าใจเรื่องการใช้งาน certificate บน Linux กัน

Topics:
- SSL certificate คืออะไร ใช้ทำอะไร
- การสร้างและจัดการ certificate
- Certificate Singing Request (CSR)
- Self-signed Certificate
- ดูรายละเอียด certificate (inspect)
- Tip ของตัว openssl subcommand
SSL certificate คืออะไร ใช้ทำอะไร
Secure Sockets Layer (SSL) คือตัวเก่าซึ่งมีจุดบกพร่อง ถูกแก้และย้ายมาใช้ตัวใหม่ที่ชื่อ Transport Layer Security (TLS). จริงๆคือ TLS แล้ว แต่ชื่อของ SSL ยังอยู่ เพราะใช้มานานมาก และถูกฝังในหลายๆ tool และ doc
TLS = upgrade over SSL
SSL ทำงานอย่างไร ?
เรามาดูว่าปกติที่เราใช้ username และ password หรือ เพิ่ม credit card detail เข้าไปใน website
เราจะเจอ 2 ปัญหาใหญ่ๆ:
-
เราจะมั่นใจได้ยังไงว่า data ที่ส่งไปให้ web จะส่งไปถูก website (ไม่ถูกส่งไปยัง web ที่ถูก clone ขึ้นมาโดย hacker)
-
เราจะมั่นใจได้ยังไงว่าจะมีใครขโมย data ตอนที่เราส่งผ่าน network

ตัวที่จะมาแก้ปัญหาคือ Certificate
ตัว certificate จะ authenticate ตัว website และ encrypt traffic ระหว่าง user และ website

ทำให้เรามั่นใจได้ว่าเราจะส่ง username และ password ให้ไม่ผิด website และ data จะไม่โดนขโมยระหว่างทาง (aka ถูกเข้ารหัส ถึงโดนขโมยก็อ่านไม่ออก)
การสร้างและจัดการ certificate
Linux มี tool ชื่อ openssl ในการจัดการ ซึ่งจริงๆแล้วมันสร้าง TLS certificate นะ
ตัว openssl สามารถสร้างการเข้ารหัสได้หลากหลายมาก ตัวดังๆจะเป็น X.509 ที่จะเป็น cert ใช้บน website ในการ authenticate และ encrypt
ซึ่งตัว openssl มี subcommand และ option เยอะมาก มี tip มาช่วย
$ openssl [SUB_COMMAND]
- อยากจะได้ sub-command
$ openssl help
หรือ
แค่ $ openssl

Output: ได้ list ของ sub-command ที่ standard command เราจะเน้นที่ req และ x509
การที่มีหลาย sub-command ก็ทำให้มีหลาย manual
$ man openssl + TAB +TAB
จะได้
ถ้าจะดู manual ของ req subcommand และ x509
$ man openssl req
$ man openssl x509
สามารถ search ด้วย /EXAMPLES เพื่อดู ตัวอย่างการใช้งาน openssl req
$ man openssl req

Output: เราได้ command ที่ใช้ในการสร้าง Certificate Singing Request (CSR) และ Self-sign certificate
$ sudo openssl req -new -key key.pem -out req.pem
$ sudo openssl req -x509 -newkey ras:2048 -keyout key.pem -out req.pem
Certificate Singing Request (CSR)
sub-command “req” จะเป็นการของ certificate signing request. ซึ่งการใช้ certificate ในการ secure website มันไม่พอ เพราะอาจจะโดนปลอม certificate ได้ แล้วจะแก้ยังไง ?
คำตอบคือต้องไปขอ Certificate จาก Certificate Authority (CA) -> step คือ
- Generate certificate บน local
- ส่ง Certificate นั้นให้กับ CA เช่น Google
- Google จะใช้ special private key ในการ sign certificate ของเรา
- เมื่อถูก certificate ถูก sign -> ทุก browser จะเช็ค signature และจะรู้ว่า certificate นี้ถูก sign โดย google และมัน valid หรือไม่
ใน step 1 สิ่งที่ถูก generate คือ 1. Private key และ 2. Certificate Signing Request (CSR)
$ openssl req -newkey rsa:2048 -keyout key.pem -out req.pem
options explain:
-newkey rsa:2048 => คือ key ที่ถูกสร้างจะใช้ rsa แบบ 2048 bit
-keyout key.pem => คือ save ตัว private key ที่ไฟล์ key.pem -out req.prm => คือ save ตัว CSR ที่ไฟล์ req.pem
โดยมันจะขอ input เรา เช่น pass phrase, country, state, org name, .. etc

Output: ด้วย $ ls จะได้ 2 ไฟล์ (key.pem, req.pem)


key.pem จะเป็น private key ที่ถูกเข้ารหัสแบบ base64
และ req.pem จะเป็น CSR ที่ถูกเข้ารหัสแบบ base64
เมื่อ step ที่ 1 ได้ CSR หรือ req.pem แล้ว ก็จะทำการเข้า step 2 คือการส่ง req.pem ไปให้กับ Certificate Authority (CA) -> จะมีการ verify detail ซึ่ง output จะได้เป็นตัว certificate มา
Self-signed Certificate
self-signed certificate คือการที่เรา verify ให้ตัว certificate เอง (ทำแทน CA) ซึ่ง use case ก็คือ เราทำการ Self-signed certificate ที่เราจะใช้งานแบบ internal ภายในองค์กร => เราอยาก config ให้ทุก computer ในองค์กรเรา trust ตัว local certificate นี้เลยออกมาเป็นท่านี้ self-signed certificate !!!
Self-signed Certificate = Certificate with skip CSR and verify by CA. generate final certificate ourselves.
Generate Self-signed Certificate
เราจะต้องเพิ่ม option เข้าไปใน command ประมาณนี้ -x509 -> บอกว่าเป็น certificate เป็น type x509 -noenc -> บอกว่าไม่ต้องใช้ password -newkey rsa:4096 -> บอกว่าใช้ rsa:4096 ในการเข้ารหัส (เป็น custom, ค่า default จะเป็น 2048) -days 365 -> บอกว่า cert มีเวลา 1 ปี -keyout myprivatekey.key -> ตั้งชื่อให้ private key -out mycertificate.cert -> ตั้งชื่อให้ certificate
$ openssl req -x509 -noenc -newkey rsa:4096 \
-days 365 -keyout myprivate.key -out mycertificate.crt

จะมีให้ใส่ info / detail ไปยัง cert เพิ่มเติม และเมื่อสร้างเสร็จ เราจะได้ 2 ไฟล์
myprivate.key = private key และ mycertificate.crt

explore with help
$ openssl x509 -help
ดูรายละเอียด certificate (inspect)
topic ก่อนหน้าเราได้ output มาเป็น certificate. เราสามารถทำการดู detail / info ของ certificate ได้อย่างไรบ้าง ?
ใช้
$ sudo openssl [TYPE] -in [CERTIFICATE] -text
eg.
$ sudo openssl x509 -in mycertificate -text
Output

ได้ info ของ certificate และ expire date
TIP : อาจจะสับสนในการใช้ openssl ระหว่าง req และ x509 ว่าจะต้องเป็น sub command ไหน จำง่ายๆ คือ
- req ใช้ในกรณีที่ต้องการ request / generate certificate
CSR
$ sudo openssl req -newkey [ALO:BIT] -keyout key.pem -out req.pem
Self-signed certificate
$ sudo openssl req [CERT_TYPE] -newkey [ALGO:BIT] -keyout [PRIVATEKEY_NAME].key \
-out [CERT_NAME].pem
- x509 ใช้ในกรณีที่มี certificate อยู่แล้ว และ อยากดูข้อมูล ของ certificate
$ sudo openssl x509 -in [CERTIFICATE] -text
TIP#2 ใช้ man ช่วย
$ man openssl req
$ man openssl x509 메타데이터
- post_id
- da9004d74554
- slug
- เนื้อหา-manage-ssl-tls-certificate-บน-linux-da9004d74554
- url
- https://medium.com/@astronut1911/%E0%B9%80%E0%B8%99%E0%B8%B7%E0%B9%89%E0%B8%AD%E0%B8%AB%E0%B8%B2-manage-ssl-tls-certificate-%E0%B8%9A%E0%B8%99-linux-da9004d74554
- canonical_url
- https://medium.com/@astronut1911/%E0%B9%80%E0%B8%99%E0%B8%B7%E0%B9%89%E0%B8%AD%E0%B8%AB%E0%B8%B2-manage-ssl-tls-certificate-%E0%B8%9A%E0%B8%99-linux-da9004d74554
- author_url
- https://medium.com/@astronut1911
- status
- ok
- fetched_at
- 2026-07-14 10:19:40