อ่าน 5 นาที
คำขอลงนามใบรับรอง
ใน ระบบ โครงสร้างพื้นฐานกุญแจสาธารณะ (PKI) คำขอลงนามใบรับรอง ( CSR หรือ คำขอรับรอง ) คือข้อความที่ส่งจากผู้สมัครไปยัง หน่วยงานออกใบรับรอง ของโครงสร้างพื้นฐานกุญแจสาธารณะ (PKI)...
คำขอลงนามใบรับรอง
ใน ระบบ โครงสร้างพื้นฐานกุญแจสาธารณะ (PKI) คำขอลงนามใบรับรอง ( CSRหรือคำขอรับรอง ) คือข้อความที่ส่งจากผู้สมัครไปยังหน่วยงานออกใบรับรองของโครงสร้างพื้นฐานกุญแจสาธารณะ (PKI) เพื่อขอใบรับรองเอกลักษณ์ดิจิทัล CSR มักประกอบด้วยกุญแจสาธารณะที่ควรออกใบรับรอง ข้อมูลระบุตัวตน (เช่น ผู้ถือหรือชื่อโดเมน) และหลักฐานการครอบครองกุญแจส่วนตัวที่เกี่ยวข้อง (โดยทั่วไปอยู่ในรูปแบบของลายเซ็นดิจิทัล ซึ่งรวมถึงการป้องกันความสมบูรณ์) รูปแบบที่พบบ่อยที่สุดสำหรับ CSR คือ ข้อกำหนด PKCS #10ซึ่งเผยแพร่ครั้งแรกในเดือนพฤศจิกายน 1993 [ 1 ] รูปแบบอื่นๆ ได้แก่ รูปแบบข้อความคำขอใบรับรอง (CRMF) ที่มีประสิทธิภาพมากกว่า[ 2 ]และ รูปแบบ SPKAC (Signed Public Key and Challenge) ที่สร้างโดยเว็บเบราว์เซอร์บาง ตัว
โปรดทราบว่ารูปแบบ CSR ทั้งสองแบบนี้ไม่ได้ตรวจสอบยืนยันตัวตนของผู้ร้องขอ หลักฐานที่มาของการร้องขอจะต้องได้รับการตรวจสอบและยืนยันด้วยวิธีการอื่น (โดยทั่วไปจะใช้โปรโตคอลการลงทะเบียนใบรับรอง เช่นCMP , ESTหรือACME ) มิเช่นนั้นใบรับรองที่ได้รับจะไม่มีคุณค่าด้านความปลอดภัยที่แท้จริง
ขั้นตอน
ก่อนที่จะสร้าง CSR สำหรับ ใบรับรอง X.509ผู้สมัครจะต้องสร้างคู่คีย์โดยเก็บคีย์ส่วนตัวของคู่คีย์นั้นไว้เป็นความลับ เช่น:
$ # https://www.openssl.org/docs/manmaster/man1/openssl-genrsa.html $ # "openssl genrsa" สร้างคีย์ส่วนตัว RSA: $ openssl genrsa -out 2024_wikipedia.org.key คำขอ CSR ประกอบด้วยข้อมูลที่ระบุตัวผู้สมัคร (เช่นชื่อเฉพาะ ) กุญแจสาธารณะที่ผู้สมัครเลือก และอาจมีข้อมูลเพิ่มเติม เมื่อใช้รูปแบบ PKCS #10 คำขอจะต้องลงนามด้วยตนเองโดยใช้กุญแจส่วนตัว ของผู้สมัคร ซึ่งเป็นการพิสูจน์การครอบครอง (POP) ของกุญแจส่วนตัว แต่จำกัดการใช้รูปแบบนี้เฉพาะกุญแจที่สามารถใช้สำหรับการลงนาม (ในรูปแบบใดรูปแบบหนึ่ง) เท่านั้น
เอกสาร CSR ต้องแนบหลักฐานแสดงที่มา (เช่น หลักฐานแสดงตัวตนของผู้สมัคร) ซึ่งจำเป็นสำหรับเหตุผลด้านความปลอดภัยโดยหน่วยงานออกใบรับรอง หน่วยงานออกใบรับรองอาจติดต่อผู้สมัครเพื่อขอข้อมูลเพิ่มเติม
ข้อมูลทั่วไปที่จำเป็นใน CSR (ตัวอย่างคอลัมน์จากตัวอย่างใบรับรอง X.509 ) โปรดทราบว่ามักจะมีทางเลือกอื่นสำหรับชื่อที่ระบุเฉพาะ (Distinguished Names หรือ DN) โดยค่าที่ต้องการใช้มากที่สุดจะถูกระบุไว้
| DN [ 3 ] | ข้อมูล | คำอธิบาย | ตัวอย่าง |
|---|---|---|---|
CN | ชื่อสามัญ | นี่คือชื่อโดเมนที่มีคุณสมบัติครบถ้วนที่คุณต้องการจดทะเบียน | *.วิกิพีเดีย.org |
O | ชื่อองค์กร | โดยปกติจะเป็นชื่อตามกฎหมายของบริษัทหรือนิติบุคคล และควรมีคำต่อท้าย เช่น Ltd., Inc. หรือ Corp. รวมอยู่ด้วย | มูลนิธิวิกิมีเดีย จำกัด |
OU | หน่วยงานองค์กร | ชื่อแผนก/ฝ่ายภายในองค์กร | มัน |
L | ท้องถิ่น | ชื่อเมือง หมู่บ้าน ฯลฯ | ซานฟรานซิสโก |
ST | สถานะ | จังหวัด ภูมิภาค เขต หรือรัฐ ห้ามย่อ (เช่น เวสต์ซัสเซ็กซ์ นอร์มังดี นิวเจอร์ซีย์) | แคลิฟอร์เนีย |
C | ประเทศ | รหัส ISO สองตัวอักษรสำหรับประเทศที่องค์กรของคุณตั้งอยู่ | เรา |
emailAddress | ที่อยู่อีเมล | ผู้ติดต่อขององค์กร ซึ่งโดยปกติจะเป็นผู้ดูแลระบบใบรับรองหรือฝ่ายไอที |
ตัวอย่างคำสั่ง OpenSSL นี้ใช้รายละเอียดตามที่ระบุในตารางด้านบนเพื่อสร้าง CSR ในรูปแบบ PKCS #10:
$ # https://www.openssl.org/docs/manmaster/man1/openssl-req.html $ # "openssl req" สร้างคำขอลงนามใบรับรองในรูปแบบ PKCS #10: $ openssl req -sha512 -new -subj "/C=US/ST=California/L=San Francisco/O=Wikimedia Foundation, Inc./CN=*.wikipedia.org" -key 2024_wikipedia.org.key -out 2024_wikipedia.org.csr โดยปกติแล้ว CSR จะถูกส่งไปยังหน่วยงานลงทะเบียน (Registration Authority หรือ RA) ซึ่งจะตรวจสอบเนื้อหาของ CSR และยืนยันตัวตนของผู้สมัคร เมื่อสำเร็จ CSR จะถูกส่งต่อไปยังหน่วยงานออกใบรับรอง (Certificate Authorityหรือ CA) ซึ่งจะสร้างใบรับรองกุญแจสาธารณะ X.509 โดยลงนามดิจิทัลโดยใช้กุญแจส่วนตัวของ CA และส่งใบรับรองใหม่ไปยังผู้สมัคร
โครงสร้างของ PKCS #10 CSR
คำขอรับรองในรูปแบบ PKCS #10 ประกอบด้วยสามส่วนหลัก ได้แก่ ข้อมูลคำขอรับรอง ตัวระบุอัลกอริธึมลายเซ็น และลายเซ็นดิจิทัลบนข้อมูลคำขอรับรองโดยใช้คีย์ส่วนตัวที่เกี่ยวข้องกับคีย์สาธารณะที่กำลังได้รับการรับรอง
ลายเซ็นนี้เป็นลายเซ็นด้วยตนเองโดยใช้คู่คีย์ของผู้สมัคร เนื่องจากข้อกำหนดเรื่องลายเซ็นด้วยตนเอง รูปแบบนี้จึงใช้ได้เฉพาะกับคีย์ประเภทที่รองรับการลงนามเท่านั้น อย่างไรก็ตาม มีรูปแบบอื่นที่ไม่รวมลายเซ็นจริง เช่นที่อธิบายไว้ในภาคผนวก C.1 ของRFC 5272 ( CMS )
ส่วนแรกประกอบด้วยข้อมูลที่สำคัญที่สุดคือ กุญแจสาธารณะและตัวตนของผู้สมัคร การลงนามด้วยตนเองของผู้สมัครเป็นการพิสูจน์การครอบครอง (POP) การตรวจสอบ POP ป้องกันไม่ให้หน่วยงานร้องขอใบรับรองปลอมของกุญแจสาธารณะของผู้อื่น[ 4 ] ดังนั้นจึงจำเป็นต้องใช้กุญแจส่วนตัวในการสร้าง PKCS #10 CSR [ 5 ] อย่างไรก็ตาม โปรดทราบว่า POP สำหรับคู่กุญแจโดยหน่วยงานที่เกี่ยวข้องไม่ได้ให้การตรวจสอบความถูกต้องของหน่วยงานที่เกี่ยวข้องแต่อย่างใด ดังนั้นหลักฐานที่มาของคำขอจากผู้สมัครจะต้องได้รับการจัดหาและตรวจสอบด้วยวิธีการอื่น มิฉะนั้นอาจสร้างใบรับรองที่ไม่ถูกต้องได้หากข้อมูลของบุคคล/ผู้ถือไม่ถูกต้อง
โดยปกติแล้ว ข้อมูลความรับผิดชอบต่อสังคม (CSR) สำหรับบัตรประจำตัวประชาชนและใบรับรองการลงนามจะรวมถึงที่อยู่อีเมลของผู้ถือบัตร หรือชื่อองค์กรในกรณีที่เป็นบัตรประจำตัวธุรกิจ
ส่วนแรก ASN.1 ประเภทCertificationRequestInfoประกอบด้วยหมายเลขเวอร์ชัน (ซึ่งเป็น 0 สำหรับเวอร์ชันที่รู้จักทั้งหมด 1.0, 1.5 และ 1.7 ของข้อกำหนด) ชื่อเรื่อง คีย์สาธารณะ (ตัวระบุอัลกอริทึม + สตริงบิต) และชุดแอตทริบิวต์ที่ให้ข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อของใบรับรอง แอตทริบิวต์สามารถมีส่วนขยายใบรับรองที่จำเป็น รหัสผ่านท้าทายเพื่อจำกัดการเพิกถอน รวมถึงข้อมูลเพิ่มเติมใดๆ เกี่ยวกับหัวข้อของใบรับรอง ซึ่งอาจรวมถึงประเภทท้องถิ่นหรือประเภทในอนาคต[ 4 ]
ตัวอย่างของ PKCS #10 CSR
มาตรฐาน PKCS#10 กำหนดไวยากรณ์ ความหมาย และรูปแบบไบนารีสำหรับ CSR เพื่อใช้กับX.509โดยเข้ารหัสใน รูปแบบ ASN.1ด้วย รูปแบบ DERต่อไปนี้เป็นตัวอย่างวิธีการตรวจสอบโครงสร้าง ASN.1 โดยใช้OpenSSL :
openssl asn1parse -i -in your_request.p10
CSR อาจแสดงในรูป แบบ PKCS#10 ที่เข้ารหัสแบบ Base64โดยมีตัวอย่างดังต่อไปนี้:
-----เริ่มคำขอใบรับรอง----- MIICzDCCAbQCAQAwgYYxCzAJBgNVBAYTAkVOMQ0wCwYDVQQIDARub25lMQ0wCwYD VQQHDARub25lMRIwEAYDVQQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAW BgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25l LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8AL PT8LLUR9ygyygPCaSmIEC8zXGJung3ykElXFRz/Jc/bu0hxCxi2YDz5IjxBBOpB/ kieG83HsSmZZtR+drZIQ6vOsr/ucvpnB9z4XzKuabNGZ5ZiTSQ9L7Mx8FzvUTq5y /ArIuM+FBeuno/IV8zvwAe/VRa8i0QjFXT9vBBp35aeatdnJ2ds50yKCsHHcjvtr 9/8zPVqqmhl2XFS3Qdqlsprzbgksom67OobJGjaV+fNHNQ0o/rzP//Pl3i7vvaEG 7Ff8tQhEwR9nJUR1T6Z7ln7S6cOr23YozgWVkEJ/dSr6LAopb+cZ88FzW5NszU6i 57HhA7ECAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4IBAQBn8OCVOIx+n0AS6WbEmYDR SspR9xOCoOwYfamB+2Bpmt82R01zJ/kaqzUtZUjaGvQvAaz5lUwoMdaO0X7I5Xfl sllMFDaYoGD4Rru4s8gz2qG/QHWA8uPXzJVAj6X0olbIdLTEqTKsnBj4Zr1AJCNy /YcG4ouLJr140o26MhwBpoCRpPjAgdYMH60BYfnc4/DILxMVqR9xqK1s98d6Ob/+ 3wHFK+S7BRWrJQXcM8veAexXuk9lHQ+FgGfD0eSYGz0kyP26Qa2pLTwumjt+nBPl rfJxaLHwTQ/1988G0H35ED0f9Md5fzoKi5evU1wG5WRxdEUPyt3QUXxdQ69i0C+7 -----สิ้นสุดการร้องขอใบรับรอง-----โครงสร้าง ASN.1 DER ของคำขอลงนามใบรับรองข้างต้น(ตามที่ openssl แยกวิเคราะห์) จะปรากฏดังนี้ โดยตัวเลขแรกคือค่าออฟเซ็ตไบต์ d คือความลึก hl คือความยาวส่วนหัวของประเภทปัจจุบัน และ l คือความยาวของเนื้อหา:
0 :d= 0 hl = 4 l= 716 cons : SEQUENCE 4 :d= 1 hl = 4 l= 436 cons : SEQUENCE 8 :d= 2 hl = 2 l= 1 prim : INTEGER : 00 11 :d= 2 hl = 3 l= 134 cons : SEQUENCE 14 :d= 3 hl = 2 l= 11 cons : SET 16 :d= 4 hl = 2 l= 9 cons : SEQUENCE 18 :d= 5 hl = 2 l= 3 prim : OBJECT : countryName 23 :d= 5 hl = 2 l= 2 prim : PRINTABLESTRING : EN 27 :d= 3 hl = 2 l= 13 cons : SET 29 :d= 4 hl = 2 l= 11 cons : SEQUENCE 31 :d= 5 hl = 2 l= 3 prim : OBJECT : stateOrProvinceName 36 :d= 5 hl = 2 l= 4 prim : UTF8STRING : none 42 :d= 3 hl = 2 l= 13 cons : SET 44 :d= 4 hl = 2 l= 11 cons : SEQUENCE 46 :d= 5 hl = 2 l= 3 prim : OBJECT : localityName 51 :d= 5 hl = 2 l= 4 prim : UTF8STRING : none 57 :d= 3hl = 2 l= 18 cons : SET 59 :d= 4 hl = 2 l= 16 cons : SEQUENCE 61 :d= 5 hl = 2 l= 3 prim : OBJECT : organizationName 66 :d= 5 hl = 2 l= 9 prim : UTF8STRING : Wikipedia 77 :d= 3 hl = 2 l= 13 cons : SET 79 :d= 4 hl = 2 l= 11 cons : SEQUENCE 81 :d= 5 hl = 2 l= 3 prim : OBJECT : organizationalUnitName 86 :d= 5 hl = 2 l= 4 prim : UTF8STRING : none 92 :d= 3 hl = 2 l= 24 cons : SET 94 :d= 4 hl = 2 l= 22 cons : SEQUENCE 96 :d= 5 hl = 2 l= 3 prim : OBJECT : commonName 101 :d= 5 hl = 2 l= 15 prim : UTF8STRING :* . wikipedia . org 118 :d= 3 hl = 2 l= 28 cons : SET 120 :d= 4 hl = 2 l= 26 cons : SEQUENCE 122 :d= 5 hl = 2 l= 9 prim : OBJECT : emailAddress 133 :d= 5 hl = 2 l= 13 prim : IA5STRING : none@ ไม่มี. com 148 :d= 2 hl = 4 l= 290 cons : SEQUENCE 152 :d= 3 hl = 2 l= 13 cons : SEQUENCE 154 :d= 4 hl = 2 l= 9 prim : OBJECT : rsaEncryption 165 :d= 4 hl = 2 l= 0 prim : NULL 167 :d= 3 hl = 4 l= 271 prim : BIT STRING 442 :d= 2 hl = 2 l= 0 cons : cont [ 0 ] 444 :d= 1 hl = 2 l= 13 cons : SEQUENCE 446 :d= 2 hl = 2 l= 9 prim : OBJECT : md5WithRSAEncryption 457 :d= 2 hl = 2 l= 0 prim : NULL 459 :d= 1 hl = 4 l= 257 prim : สตริงบิตข้อมูลนี้สร้างขึ้นโดยการใส่การเข้ารหัส base64 ลงในคำสั่งโดยที่ PEM ( Privacy-Enhanced Mail ) คือการเข้ารหัสของกฎการเข้ารหัสที่แตกต่างกัน ของ ASN.1 ในรูปแบบ base64 openssl asn1parse -in your_request.p10 -inform PEM -i
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ คำขอลงนามใบรับรอง
ใน ระบบ โครงสร้างพื้นฐานกุญแจสาธารณะ (PKI) คำขอลงนามใบรับรอง ( CSR หรือ คำขอรับรอง ) คือข้อความที่ส่งจากผู้สมัครไปยัง หน่วยงานออกใบรับรอง ของโครงสร้างพื้นฐานกุญแจสาธารณะ (PKI)...
ขั้นตอน
ก่อนที่จะสร้าง CSR สำหรับ ใบรับรอง X.509 ผู้สมัครจะต้องสร้าง คู่คีย์ โดยเก็บ คีย์ส่วนตัว ของคู่คีย์นั้นไว้เป็นความลับ เช่น:
โครงสร้างของ PKCS #10 CSR
คำขอรับรองในรูปแบบ PKCS #10 ประกอบด้วยสามส่วนหลัก ได้แก่ ข้อมูลคำขอรับรอง ตัวระบุอัลกอริธึมลายเซ็น และลายเซ็นดิจิทัลบนข้อมูลคำขอรับรองโดยใช้คีย์ส่วนตัวที่เกี่ยวข้องกับคีย์สาธารณะที่กำลังได้รับการรับรอง
ตัวอย่างของ PKCS #10 CSR
มาตรฐาน PKCS#10 กำหนดไวยากรณ์ ความหมาย และรูปแบบไบนารีสำหรับ CSR เพื่อใช้กับ X.509 โดยเข้ารหัสใน รูปแบบ ASN.1 ด้วย รูปแบบ DER ต่อไปนี้เป็นตัวอย่างวิธีการตรวจสอบโครงสร้าง ASN.1 โดยใช้ OpenSSL :