← Back to list

[เนื้อหา] Manage SSL/TLS Certificate บน Linux

เราจะมาทำความเข้าใจเรื่องการใช้งาน certificate บน Linux กัน

Supanut Laddayam · 2025-12-11 03:24 · 0 claps · 3.9 min read
#linux #ubuntu-server #ssltls #ssl-certificate #tls-certificate
Open on Medium ↗
Wiki topics: 🔓 · Open Source

[เนื้อหา] Manage SSL/TLS Certificate บน Linux

เราจะมาทำความเข้าใจเรื่องการใช้งาน certificate บน Linux กัน

Topics:

  1. SSL certificate คืออะไร ใช้ทำอะไร
  2. การสร้างและจัดการ certificate
  • Certificate Singing Request (CSR)
  • Self-signed Certificate
  1. ดูรายละเอียด certificate (inspect)
  2. 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 ปัญหาใหญ่ๆ:

  1. เราจะมั่นใจได้ยังไงว่า data ที่ส่งไปให้ web จะส่งไปถูก website (ไม่ถูกส่งไปยัง web ที่ถูก clone ขึ้นมาโดย hacker)

  2. เราจะมั่นใจได้ยังไงว่าจะมีใครขโมย 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] 
  1. อยากจะได้ 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 คือ

  1. Generate certificate บน local
  2. ส่ง Certificate นั้นให้กับ CA เช่น Google
  3. Google จะใช้ special private key ในการ sign certificate ของเรา
  4. เมื่อถูก 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