แปลง JWK เปน PEM: คู่มือใช้ JWK to PEM Converter ออนไลน์
เรียนรู้วิธีแปลง JWK เปน PEM และย้อนกลับ สำหรับคีย์ RSA, EC และ Ed25519 ด้วยเครื่องมือฟรีที่ทำงานในเบราว์เซอร์
Table of Contents
ถ้าคุณเคยทำงานกับระบบ authentication สมัยใหม่ คงเคยเจอสถานการณ์ที่คีย์เดียวกันถูกเก็บไว้ในคนละรูปแบบ ฝั่งหนึ่งเป็น JSON Web Key (JWK) ที่ระบบ OAuth หรือ identity provider ส่งมาให้ อีกฝั่งหนึ่งเป็น PEM ที่ OpenSSL, nginx หรือไลบรารีภาษาต่าง ๆ ต้องการ ผลคือคุณต้องมานั่งแปลงคีย์ไปมาด้วยสคริปต์ที่เขียนเอง ซึ่งทั้งเสียเวลาและเสี่ยงต่อความผิดพลาด
JWK to PEM Converter คือเครื่องมือออนไลน์ฟรีที่แก้ปัญหานี้โดยตรง มันแปลง JWK เปน PEM และแปลง PEM กลับเปน JWK ได้ในคลิกเดียว รองรับคีย์ RSA, EC (P-256, P-384, P-521) และ Ed25519 โดยทำงานทั้งหมดในเบราว์เซอร์ผ่าน Web Crypto API — คีย์ของคุณไม่ถูกส่งไปเซิร์ฟเวอร์ใด ๆ ทั้งสิ้น
ในคู่มือนี้ เราจะพาไปดูว่าทำไมการแปลงระหว่างสองรูปแบบนี้ถึงสำคัญ เครื่องมือนี้มีฟีเจอร์อะไรบ้าง ใช้งานอย่างไรทีละขั้นตอน และเข้าใจเบื้องหลังของทั้ง JWK และ PEM ให้ลึกพอที่จะใช้มันได้อย่างมั่นใจในงาน production จริง
ทำไมต้องใช้ JWK to PEM Converter?
- ระบบสมัยใหม่พูดภาษา JWK แต่โครงสร้างพื้นฐานเดิมพูดภาษา PEM — JWKS endpoint, OAuth 2.0 และ OpenID Connect แจกจ่ายคีย์ในรูปแบบ JWK แต่เซิร์ฟเวอร์ nginx, Apache, OpenSSL และไลบรารีเข้ารหัสลับจำนวนมากต้องการ PEM การแปลงระหว่างสองโลกนี้จึงเป็นงานที่เกิดขึ้นประจำ
- ไม่ต้องเขียนสคริปต์แปลงเอง — การแปลง JWK เปน PEM ด้วยมือต้องเข้าใจทั้งโครงสร้าง JSON, การ encode แบบ base64url และ ASN.1 structure ของ SPKI/PKCS#8 ซึ่งซับซ้อนและผิดพลาดง่าย เครื่องมือนี้จัดการทั้งหมดให้ในพริบตา
- ทำงาน 100% client-side — คีย์ส่วนตัว (private key) เป็นข้อมูลอ่อนไหวระดับสูงสุด เครื่องมือนี้ใช้ Web Crypto API ในเบราว์เซอร์ของคุณโดยตรง ไม่มีข้อมูลใดถูกอัปโหลดไปยังเซิร์ฟเวอร์
- รองรับคีย์ครบทุกประเภทที่ใช้กันจริง — ทั้ง RSA, EC บน curve P-256, P-384, P-521 และ Ed25519 (OKP) ครอบคลุมคีย์แทบทุกชนิดที่คุณจะเจอในระบบ JWT และ TLS
- แปลงได้สองทิศทาง — ไม่ใช่แค่ JWK → PEM แต่ยังแปลง PEM → JWK ได้ด้วย เหมาะทั้งตอนนำเข้าคีย์จากระบบเดิมและตอนส่งออกคีย์ไปให้ระบบใหม่
- ตรวจจับประเภทคีย์อัตโนมัติ — อ่าน field kty และตรวจว่ามี parameter d หรือไม่ เพื่อแยก public key กับ private key แล้วเลือก output format ที่ถูกต้องให้เอง (SPKI หรือ PKCS#8)
คุณสมบัติเด่น
| คุณสมบัติ | รายละเอียด |
|---|---|
| การแปลงสองทิศทาง | JWK → PEM และ PEM → JWK ในเครื่องมือเดียว |
| ประมวลผลในเบราว์เซอร์ | ใช้ Web Crypto API ทั้งหมด ไม่ส่งข้อมูลออกนอกเครื่อง |
| ประเภทคีย์ที่รองรับ | RSA, EC (P-256, P-384, P-521), Ed25519 |
| ตรวจจับประเภทคีย์อัตโนมัติ | อ่านจาก field kty (RSA/EC/OKP) และ parameter d |
| รูปแบบ PEM output | Public key เปน SPKI, private key เปน PKCS#8 |
| รองรับ PEM header หลายแบบ | รวมถึง legacy RSA PRIVATE KEY และ EC PRIVATE KEY |
| JSON output สวยงาม | Pretty-print พร้อม canonical key ordering |
| Copy to clipboard | คัดลอกผลลัพธ์ไปใช้ได้ทันที |
| ข้อความ error ชัดเจน | แจ้งเมื่อขาด field kty หรือ crv พร้อมคำแนะนำ |
- แยก public/private key อัตโนมัติ: ใน JWK การมีอยู่ของ parameter d (private exponent หรือ private scalar) คือตัวบ่งชี้ว่านี่คือ private key เครื่องมือจะตรวจจุดนี้ให้เอง คุณไม่ต้องระบุอะไรเพิ่ม
- จัดการ PEM header แบบ legacy: ไฟล์ PEM เก่าที่สร้างจาก OpenSSL รุ่นก่อน ๆ มักใช้ header -----BEGIN RSA PRIVATE KEY----- หรือ -----BEGIN EC PRIVATE KEY----- ซึ่งไม่ใช่ PKCS#8 มาตรฐาน เครื่องมือนี้ parse ได้หมด ไม่ต้องแปลงไฟล์ก่อน
- ผลลัพธ์พร้อมใช้ทันที: PEM ที่ได้มี header/footer ครบถ้วนและขึ้นบรรทัดถูกต้อง ส่วน JWK ก็เป็น JSON ที่จัดรูปแบบสวย อ่านง่าย คัดลอกไปวางในโค้ดหรือ config ได้เลย
วิธีใช้งาน
- เปิดเครื่องมือ — ไปที่ JWK to PEM Converter เลือกทิศทางที่ต้องการแปลง (JWK เปน PEM หรือ PEM เปน JWK)
- วางข้อมูลต้นทาง — ถ้าแปลงจาก JWK ให้วาง JSON object ของคีย์ลงในช่อง input ถ้าแปลงจาก PEM ให้วางบล็อก PEM ทั้งก้อนรวมถึงบรรทัด -----BEGIN ...----- และ -----END ...-----
- กดแปลง — เครื่องมือจะอ่าน field kty เพื่อระบุประเภทคีย์ ตรวจ parameter d เพื่อแยก public/private แล้วแปลงผ่าน Web Crypto API ทันที
- ตรวจสอบผลลัพธ์ — คุณจะได้ PEM (SPKI สำหรับ public key หรือ PKCS#8 สำหรับ private key) หรือ JWK JSON ที่จัดรูปแบบเรียบร้อย พร้อมข้อความแจ้งสถานะชัดเจน
- คัดลอกไปใช้งาน — กดปุ่ม copy to clipboard เพื่อนำผลลัพธ์ไปวางในเซิร์ฟเวอร์ config, โค้ดแอปพลิเคชัน หรือไฟล์คีย์ได้เลย
เข้าใจรูปแบบ JWK และ PEM
JWK คืออะไร
JSON Web Key (JWK) คือรูปแบบการแทนคีย์เข้ารหัสลับในฐานะ JSON object กำหนดไว้ใน RFC 7517 มันถูกออกแบบมาให้เครื่องอ่านเครื่องส่งต่อได้ง่าย จึงเป็นรูปแบบมาตรฐานในระบบ JWT, JWKS (JSON Web Key Set) และ OpenID Connect
Field สำคัญที่ควรรู้จัก:
- kty (key type) — บอกประเภทคีย์: RSA, EC (elliptic curve) หรือ OKP (octet key pair ใช้กับ Ed25519)
- n — modulus ของคีย์ RSA (base64url encoded)
- e — public exponent ของคีย์ RSA โดยทั่วไปคือ AQAB (65537)
- d — private component ถ้ามี field นี้แปลว่านี่คือ private key (สำหรับ RSA คือ private exponent, สำหรับ EC/OKP คือ private scalar)
- crv — ชื่อ curve สำหรับคีย์ EC/OKP เช่น P-256, P-384, P-521 หรือ Ed25519
- x, y — พิกัดจุด public key บน curve สำหรับคีย์ EC
ตัวอย่าง JWK ของ public key แบบ EC:
{
"kty": "EC",
"crv": "P-256",
"x": "f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
"y": "x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0"
}
PEM คืออะไร
PEM (Privacy-Enhanced Mail) คือรูปแบบการ encode ข้อมูลไบนารี DER (Distinguished Encoding Rules ของ ASN.1) ให้กลายเป็นข้อความ ASCII โดยห่อหุ้มด้วย base64 และมีบรรทัด header/footer บอกประเภทเนื้อหา เช่น:
-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE... -----END PUBLIC KEY-----
จุดสำคัญที่ต้องแยกให้ออกคือโครงสร้าง ASN.1 ข้างใน:
- SPKI (SubjectPublicKeyInfo) — มาตรฐานการห่อหุ้ม public key ใช้ header -----BEGIN PUBLIC KEY----- ภายในมี algorithm identifier บวกกับคีย์ ทำให้รู้ได้ทันทีว่าคีย์นี้เป็น EC curve ไหนหรือ RSA
- PKCS#8 — มาตรฐานการห่อหุ้ม private key ใช้ header -----BEGIN PRIVATE KEY----- ภายในมี algorithm identifier และ private key data
- Legacy headers — OpenSSL รุ่นเก่าสร้าง -----BEGIN RSA PRIVATE KEY----- (PKCS#1) และ -----BEGIN EC PRIVATE KEY----- (SEC1) ซึ่งโครงสร้างข้างในต่างจาก PKCS#8 แต่เครื่องมือของเราก็ parse ได้เช่นกัน
ทำไมสองรูปแบบนี้ถึงต่างกัน และใช้เมื่อไหร่
JWK ออกแบบมาเพื่อ การแลกเปลี่ยนคีย์ผ่านเว็บ — มันอยู่ใน JSON ได้เลย, field ต่าง ๆ มีชื่อชัดเจน, เหมาะกับการเผยแพร่ public key ผ่าน JWKS endpoint เพื่อให้ client นำไป verify JWT
PEM ออกแบบมาเพื่อ การจัดเก็บและส่งต่อคีย์ในระบบไฟล์และโครงสร้างพื้นฐานดั้งเดิม — nginx, Apache, OpenSSL CLI, ไลบรารี crypto ในภาษาส่วนใหญ่ และ certificate chain ล้วนอ่าน PEM
ดังนั้นกฎจำง่าย ๆ คือ: ถ้าทำงานกับ JWT/OAuth/JWKS คุณจะเจอ JWK ถ้าทำงานกับ TLS, เซิร์ฟเวอร์ config หรือ OpenSSL คุณจะเจอ PEM และเมื่อไหร่ที่ต้องข้ามโลกระหว่างสองฝั่งนี้ คุณก็ต้องแปลงรูปแบบ — ซึ่งก็คือสิ่งที่เครื่องมือนี้ทำนั่นเอง
กรณีใช้งานจริง
ย้ายคีย์จาก JWKS endpoint ไปเซิร์ฟเวอร์ที่ต้องการ PEM
สมมติ identity provider ของคุณเผยแพร่ public key ผ่าน JWKS endpoint แต่ API gateway หรือ reverse proxy ของคุณต้องการ PEM file เพื่อ verify signature ของ JWT คุณสามารถคัดลอก JWK จาก JWKS response มาวางในเครื่องมือ แปลงเป็น SPKI PEM แล้วบันทึกเป็นไฟล์ .pem ให้เซิร์ฟเวอร์อ่านได้ทันที ไม่ต้องเขียนสคริปต์ jwk-to-pem เอง
ใช้ JWK กับ OpenSSL และ nginx
คีย์ที่สร้างหรือจัดการในรูปแบบ JWK (เช่นจาก cloud console บางแห่ง) ไม่สามารถใช้กับคำสั่ง openssl หรือ directive ของ nginx ได้โดยตรง แปลงเป็น PEM ก่อนแล้วจึงนำไปใช้ เช่น:
openssl pkey -in private.pem -noout -text
หรือใน nginx:
ssl_certificate /etc/nginx/certs/server.pem; ssl_certificate_key /etc/nginx/certs/private.pem;
นำเข้าคีย์จาก cloud KMS
Cloud KMS หลายเจ้า export คีย์ออกมาในรูปแบบ JWK หรือ JSON ที่คล้ายกัน เมื่อต้องการใช้คีย์นั้นกับไลบรารีในแอปพลิเคชันที่รับเฉพาะ PEM (เช่น crypto ของ Node.js หรือ cryptography ของ Python) การแปลง JWK เปน PEM คือขั้นตอนที่ขาดไม่ได้ และในทางกลับกัน ถ้าต้องอัปโหลดคีย์กลับไปยังระบบที่รับเฉพาะ JWK ก็ใช้ทิศทาง PEM → JWK ของเครื่องมือเดียวกันได้
ดีบักการ sign และ verify JWT
เวลา JWT verification ล้มเหลวด้วย error ทำนอง "invalid signature" สาเหตุหนึ่งคือคีย์ที่ใช้ verify มีรูปแบบหรือ encoding ไม่ตรงกับที่ library คาดไว้ การแปลงคีย์ไปกลับระหว่าง JWK และ PEM แล้วเปรียบเทียบว่า field ต่าง ๆ (เช่น n, e, x, y) ตรงกันหรือไม่ ช่วยแยกปัญหาได้ว่าเกิดจากตัวคีย์หรือเกิดจากโค้ดกันแน่ และถ้าคุณต้องการดูเนื้อหา JWT ด้วย ลองใช้ JWT Decoder ประกอบกัน
แนวทางปฏิบัติที่ดี
- ห้ามแชร์ private key เด็ดขาด — private key คือตัวตนของระบบคุณ ใครถือมันสามารถปลอมลายเซ็นหรือถอดรหัสข้อมูลได้ การแปลงคีย์ควรทำในเครื่องมือที่ประมวลผลในเครื่องเท่านั้น
- อย่าวาง production key ในเครื่องมือออนไลน์ที่ไม่น่าเชื่อถือ — เว็บไซต์ที่ส่งข้อมูล input ไปยังเซิร์ฟเวอร์อาจบันทึกคีย์ของคุณไว้ ตรวจสอบให้แน่ใจว่าเครื่องมือทำงาน client-side จริงก่อนใช้กับคีย์จริง
- เลือกเครื่องมือที่ทำงาน client-side — อย่าง JWK to PEM Converter ที่ใช้ Web Crypto API ในเบราว์เซอร์ทั้งหมด ไม่มี network request ใด ๆ ที่พาข้อมูลคีย์ออกไป
- ตรวจสอบการแปลงกลับ (round-trip) — หลังแปลง JWK เปน PEM แล้ว ลองแปลง PEM กลับเปน JWK แล้วเทียบว่า field ทุกตัวเท่าเดิม ถ้าไม่เท่ากันแสดงว่ามีบางอย่างผิดพลาดระหว่างทาง
- หมุนเวียนคีย์ (key rotation) เป็นประจำ — กำหนดอายุการใช้งานคีย์และหมุนเวียนตามรอบ เมื่อเปลี่ยนคีย์ใหม่ อย่าลืมอัปเดตทั้ง JWKS endpoint และ PEM file ในทุกเซิร์ฟเวอร์ที่เกี่ยวข้อง
- แยก public กับ private ให้ชัด — public key เผยแพร่ได้เสรีผ่าน JWKS แต่ private key ต้องอยู่ในที่ปลอดภัยเท่านั้น และควรตรวจสอบเสมอว่าผลลัพธ์ที่ส่งออกมีแค่ส่วนที่ควรเปิดเผย
พร้อมแปลงคีย์ของคุณแล้วหรือยัง?
ไม่ว่าคุณจะกำลังย้ายคีย์จาก JWKS ไปเซิร์ฟเวอร์, เตรียม PEM สำหรับ nginx, หรือดีบักปัญหา JWT signature — JWK to PEM Converter พร้อมช่วยคุณทันที ฟรี ไม่ต้องสมัครสมาชิก รองรับ RSA, EC และ Ed25519 ครบถ้วน และที่สำคัญคือคีย์ของคุณไม่ออกจากเครื่องของคุณเลยเพราะทุกอย่างประมวลผลในเบราว์เซอร์ ลองเปิดใช้แล้ววางคีย์ของคุณดูได้เลย
เครื่องมือที่เกี่ยวข้อง
- JWT Decoder — ถอดรหัสและตรวจสอบโครงสร้างของ JWT token
- RSA Key Generator — สร้างคีย์ RSA คู่ใหม่สำหรับงานของคุณ
- Certificate Generator — ออกใบรับรอง X.509 สำหรับทดสอบระบบ TLS
ขอให้สนุกกับการแปลงคีย์!