สร้าง CSR สำหรับขอ SSL Certificate ทีละขั้นตอน

การขอ SSL Certificate จาก Certificate Authority (CA) เช่น RapidSSL, GeoTrust หรือ DigiCert ต้องใช้ไฟล์ที่เรียกว่า CSR (Certificate Signing Request) เป็นขั้นตอนแรก บทความนี้จะพาคุณสร้าง CSR ทีละขั้นตอนทั้งบน Linux และ Windows รวมถึงอธิบายแต่ละ field ที่ต้องกรอกให้เข้าใจ

CSR คืออะไร

CSR ย่อมาจาก Certificate Signing Request คือไฟล์ข้อความที่มีข้อมูลเกี่ยวกับองค์กรและโดเมนของคุณ รวมถึง Public Key ที่เชื่อมโยงกับ Private Key ที่สร้างขึ้นพร้อมกัน เมื่อคุณส่ง CSR ไปให้ CA พวกเขาจะใช้ข้อมูลในนั้นเพื่อสร้าง SSL Certificate ที่ลงนามรับรองแล้ว

กระบวนการทำงานของ CSR มีดังนี้:

  1. คุณสร้าง Private Key + CSR บนเซิร์ฟเวอร์ของคุณ
  2. ส่ง CSR (ไม่ใช่ Private Key) ให้ CA
  3. CA ตรวจสอบข้อมูลและออก Certificate ให้
  4. คุณติดตั้ง Certificate + Private Key บนเซิร์ฟเวอร์

สำคัญ: Private Key ต้องเก็บไว้ที่เซิร์ฟเวอร์เท่านั้น ห้ามส่งให้ CA หรือบุคคลอื่นเด็ดขาด ถ้า Private Key หลุดออกไป ต้องยกเลิก Certificate และขอใหม่ทันที

CSR คืออะไร มีข้อมูลอะไรบ้าง (CN, O, OU, SAN)

เมื่อแกะไฟล์ CSR ออกมาดู จะพบว่าด้านในมีองค์ประกอบหลักอยู่ 2 ส่วน คือ Subject (ข้อมูลระบุตัวตนของเจ้าของโดเมน/องค์กร) และ Public Key ที่ CA จะนำไปลงนามรับรอง ส่วน Subject นี้เองที่ประกอบด้วยฟิลด์มาตรฐานหลายตัว ซึ่งแต่ละตัวมีบทบาทต่างกันและส่งผลต่อชนิดของ Certificate ที่จะได้รับ การเข้าใจว่าแต่ละฟิลด์หมายถึงอะไรจะช่วยให้กรอกข้อมูลได้ถูกต้องตั้งแต่ครั้งแรก ไม่ต้องสร้าง CSR ใหม่ซ้ำหลายรอบ

ฟิลด์ที่สำคัญที่สุดในทุก CSR มีดังนี้:

เกร็ดสำคัญ: เบราว์เซอร์สมัยใหม่ (Chrome, Firefox, Safari) ใช้ค่าใน SAN ในการตรวจสอบว่าโดเมนตรงกับ Certificate หรือไม่ ไม่ได้ดูจาก CN แล้ว ดังนั้นถ้าต้องการให้ทั้ง example.com และ www.example.com ใช้ Certificate เดียวกันได้ ต้องใส่ทั้งสองชื่อไว้ใน SAN เสมอ

ข้อมูลที่ต้องเตรียมก่อนสร้าง CSR

ก่อนสร้าง CSR ให้เตรียมข้อมูลต่อไปนี้ให้พร้อม:

สร้าง CSR บน Linux ด้วย OpenSSL

วิธีที่นิยมที่สุดคือใช้ OpenSSL ซึ่งติดตั้งมาแล้วใน Linux ส่วนใหญ่ รันคำสั่งต่อไปนี้ใน Terminal:

ขั้นที่ 1: สร้าง Private Key และ CSR พร้อมกัน

openssl req -new -newkey rsa:2048 -nodes \
  -keyout yourdomain.key \
  -out yourdomain.csr

คำสั่งนี้จะถามข้อมูลทีละ field จากนั้นสร้างไฟล์ 2 ไฟล์:

ขั้นที่ 2: สร้างแบบ Non-Interactive (ระบุข้อมูลในคำสั่งเดียว)

openssl req -new -newkey rsa:2048 -nodes \
  -keyout yourdomain.key \
  -out yourdomain.csr \
  -subj "/C=TH/ST=Bangkok/L=Bangkok/O=Your Company/OU=IT/CN=yourdomain.com"

ขั้นที่ 3: ตรวจสอบเนื้อหาของ CSR

openssl req -text -noout -verify -in yourdomain.csr

คำสั่งนี้จะแสดงข้อมูลใน CSR เพื่อให้คุณตรวจสอบความถูกต้องก่อนส่งให้ CA

สร้าง CSR บน Windows

บน Windows สามารถสร้าง CSR ได้หลายวิธี ทั้งผ่าน IIS Manager และ OpenSSL สำหรับ Windows

วิธีที่ 1: ผ่าน IIS Manager

  1. เปิด IIS Manager → คลิกที่เซิร์ฟเวอร์
  2. เลือก Server Certificates → Create Certificate Request
  3. กรอกข้อมูล Distinguished Name Properties
  4. เลือก Cryptographic Service Provider: Microsoft RSA SChannel และ Bit Length: 2048
  5. บันทึกไฟล์ .txt ที่เป็น CSR

วิธีที่ 2: OpenSSL บน Windows

ดาวน์โหลด OpenSSL สำหรับ Windows จาก slproweb.com แล้วรันคำสั่งเดียวกับ Linux ใน Command Prompt หรือ PowerShell

สร้าง CSR ผ่าน DirectAdmin (ไม่ต้องใช้คำสั่ง)

ถ้าใช้โฮสติ้งหรือ VPS ที่มี DirectAdmin (เช่น แพ็กเกจของ AsiaGB) คุณสามารถสร้าง CSR และ Private Key ผ่านหน้าเว็บได้โดยไม่ต้องเปิด Terminal เลย DirectAdmin จะจัดเก็บ Private Key ให้บนเซิร์ฟเวอร์โดยอัตโนมัติ ซึ่งช่วยลดความเสี่ยงที่ Private Key จะหลุดออกไประหว่างการคัดลอกไฟล์ ทำตามขั้นตอนนี้:

  1. เข้าสู่ระบบ DirectAdmin แล้วไปที่เมนู SSL Certificates ภายใต้โดเมนที่ต้องการ
  2. เลือกตัวเลือก Create A Certificate Request (สร้างคำขอใบรับรอง)
  3. กรอกข้อมูล CSR ให้ครบ: Common Name (โดเมน), Email, Organization, City, State, Country และ Key Size (เลือก 2048 ขึ้นไป)
  4. ถ้ารองรับ ให้เพิ่ม SAN ในช่อง More Certificate Names เพื่อให้คุ้มครองทั้ง example.com และ www.example.com
  5. กด Save — DirectAdmin จะสร้าง Private Key เก็บไว้ และแสดง CSR (บล็อก -----BEGIN CERTIFICATE REQUEST-----) ให้คัดลอก

คัดลอกบล็อก CSR ทั้งหมดไปวางในหน้าสั่งซื้อ SSL จากนั้นเมื่อ CA ออกใบรับรองกลับมา ก็นำ Certificate มาวางในเมนู Paste a pre-generated certificate and key ของ DirectAdmin ได้ทันที เพราะ Private Key ถูกเก็บคู่ไว้อยู่แล้ว — อ่านรายละเอียดการติดตั้งเพิ่มเติมได้ที่บทความ ติดตั้ง SSL Certificate บน DirectAdmin

หมายเหตุ: ลูกค้า AsiaGB ที่ใช้โฮสติ้ง DirectAdmin สร้าง CSR ได้ฟรีผ่านหน้า control panel หรือจะใช้ OpenSSL บนเครื่องตัวเองแล้วส่ง CSR เข้ามาก็ได้ ทั้งสองวิธีใช้กับ SSL แบบเสียเงิน (DV เริ่มต้น 1,000 บาท/ปี) ได้เหมือนกัน

กรอกข้อมูล CSR ให้ถูก (CN ตรงโดเมน, Wildcard *.domain.com)

สาเหตุที่ทำให้ CA ปฏิเสธ CSR หรือออก Certificate ผิดโดเมนมากที่สุด คือการกรอก Common Name ไม่ตรงกับโดเมนที่จะใช้งานจริง การเลือกรูปแบบ CN ให้ถูกตามชนิดของ Certificate จึงสำคัญมาก ตารางด้านล่างสรุปว่าควรกรอก CN อย่างไรในแต่ละกรณี:

สิ่งที่ต้องการคุ้มครอง กรอก CN ว่า ชนิด Certificate
เฉพาะโดเมนหลัก example.com Single-domain
โดเมนหลัก + www example.com + SAN www.example.com Single + SAN
ทุก subdomain ระดับเดียว *.example.com Wildcard
หลายโดเมนต่างกัน example.com + SAN example.net, example.org Multi-domain (SAN)

จุดที่มักเข้าใจผิดเรื่อง Wildcard คือ *.example.com จะคุ้มครองเฉพาะ subdomain ระดับเดียว เช่น blog.example.com หรือ shop.example.com แต่ ไม่ ครอบคลุมตัวโดเมนเปล่า example.com และ ไม่ ครอบคลุม subdomain ซ้อน เช่น a.b.example.com ถ้าต้องการให้โดเมนเปล่าใช้งานได้ด้วย ต้องใส่ example.com เพิ่มเข้าไปใน SAN ของ CSR

คำสั่งสร้าง CSR แบบ Wildcard + SAN ด้วย OpenSSL

OpenSSL ไม่รับ SAN ผ่าน -subj โดยตรง ต้องสร้างไฟล์ config ก่อน เช่นไฟล์ san.cnf:

[ req ]
default_bits       = 2048
distinguished_name = dn
req_extensions     = req_ext
prompt             = no

[ dn ]
C  = TH
ST = Bangkok
L  = Bangkok
O  = Your Company
CN = *.example.com

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = example.com
DNS.2 = *.example.com

จากนั้นสร้าง CSR โดยอ้างไฟล์ config นี้:

openssl req -new -newkey rsa:2048 -nodes \
  -keyout example.key \
  -out example.csr \
  -config san.cnf

ตรวจสอบ CSR และเก็บ Private Key ให้ปลอดภัย

ก่อนส่ง CSR ให้ CA ควรตรวจสอบเนื้อหาภายในเสมอ เพื่อยืนยันว่า CN, Organization และ SAN ถูกต้องครบถ้วน ความผิดพลาดเล็กน้อย เช่น พิมพ์ CN ผิด 1 ตัวอักษร อาจทำให้ต้องเสียเวลาออกใบรับรองใหม่ทั้งใบ ใช้คำสั่งนี้เพื่อดูข้อมูลภายใน CSR แบบอ่านง่าย:

openssl req -noout -text -in example.csr

มองหาบรรทัด Subject: เพื่อตรวจ CN/O/C และมองหา X509v3 Subject Alternative Name: เพื่อยืนยันว่า SAN ที่ตั้งใจใส่อยู่ครบ ถ้าต้องการตรวจว่า CSR กับ Private Key เป็นคู่เดียวกันจริง ให้เทียบค่า modulus ของทั้งสองไฟล์:

openssl req -noout -modulus -in example.csr | openssl md5
openssl rsa -noout -modulus -in example.key | openssl md5

ค่า md5 ทั้งสองบรรทัดต้องตรงกันเป๊ะ ถ้าไม่ตรง แปลว่า CSR กับ Private Key ไม่ใช่คู่เดียวกัน ติดตั้งแล้วเซิร์ฟเวอร์จะไม่ยอมเริ่ม HTTPS

การเก็บ Private Key ให้ปลอดภัย

ดูเนื้อหา CSR และส่งให้ CA

ไฟล์ CSR ที่สร้างได้จะเป็น Base64 ที่มีหน้าตาแบบนี้:

-----BEGIN CERTIFICATE REQUEST-----
MIICpDCCAYwCAQAwXzELMAkGA1UEBhMCVEgxEDAOBgNVBAgMB0Jhbmdrb2sxEDAO
...
-----END CERTIFICATE REQUEST-----

คัดลอก text ทั้งหมดรวมถึงบรรทัด -----BEGIN CERTIFICATE REQUEST----- และ -----END CERTIFICATE REQUEST----- แล้วนำไปวางในหน้าสั่งซื้อ SSL Certificate ของ AsiaGB

ข้อผิดพลาดที่พบบ่อยเมื่อสร้าง CSR

คำถามที่พบบ่อยเกี่ยวกับ CSR

สร้าง CSR แล้วต้องสร้าง Private Key ใหม่ทุกครั้งไหม

โดยทั่วไปแนะนำให้สร้าง Private Key ใหม่พร้อม CSR ทุกครั้งที่ขอ Certificate ใหม่ เพราะปลอดภัยกว่า แต่ในทางเทคนิคสามารถสร้าง CSR ใหม่จาก Private Key เดิมได้ด้วยคำสั่ง openssl req -new -key example.key -out new.csr วิธีนี้เหมาะกับกรณีต่ออายุ Certificate ที่ต้องการคง Key เดิมไว้ อย่างไรก็ตามการสร้าง Key ใหม่ทุกครั้งช่วยลดความเสี่ยงหาก Key เก่าเคยถูกเปิดเผย

CSR มีวันหมดอายุไหม

ตัวไฟล์ CSR เองไม่มีวันหมดอายุ คุณสามารถเก็บไว้และนำไปยื่นกับ CA เมื่อไหร่ก็ได้ แต่ในทางปฏิบัติควรสร้าง CSR ใหม่ทุกครั้งที่ขอใบรับรอง เพราะข้อมูลองค์กรหรือนโยบายของ CA (เช่น ขนาด Key ขั้นต่ำ) อาจเปลี่ยนไป Certificate ที่ออกจาก CSR ต่างหากที่มีวันหมดอายุตามอายุของใบรับรอง

ใช้ CSR เดิมต่ออายุ SSL ได้หรือไม่

ได้ แต่ไม่แนะนำ การต่ออายุด้วย CSR เดิมหมายความว่าใช้ Private Key เดิมต่อไป ซึ่งหาก Key นั้นเคยถูกใช้งานมานานหรือเสี่ยงรั่ว ก็ควรสร้าง CSR + Private Key ชุดใหม่จะปลอดภัยกว่า ระบบของ CA ส่วนใหญ่รองรับทั้งสองแบบ เพียงวาง CSR ในขั้นตอนต่ออายุตามปกติ

RSA 2048 กับ ECDSA ต่างกันอย่างไร ควรเลือกตัวไหน

RSA 2048-bit เป็นค่ามาตรฐานที่รองรับได้กว้างที่สุดและเข้ากันได้กับเซิร์ฟเวอร์เก่าทุกตัว ส่วน ECDSA (เช่น P-256) ให้ความปลอดภัยเทียบเท่าด้วยขนาด Key ที่เล็กกว่า ทำให้ handshake เร็วขึ้นเล็กน้อย หากไม่มีข้อกำหนดพิเศษ การเลือก RSA 2048 ก็เพียงพอและปลอดภัยสำหรับเว็บไซต์ทั่วไป

สั่งซื้อ SSL Certificate วันนี้

DV SSL เริ่มต้น 1,000 บาท/ปี จาก RapidSSL, GeoTrust, DigiCert พร้อมทีมซัพพอร์ตไทยช่วยติดตั้ง

ดู SSL Certificate