Score:1

จะทำซ้ำการกำหนดค่าของใบรับรองที่ลงนามเองด้วย OpenSSL ได้อย่างไร

ธง in

ฉันมีโหลดบาลานเซอร์ที่ต้องใช้ใบรับรองที่มีการกำหนดค่าเฉพาะ น่าเสียดายที่ผู้สร้างใบรับรองแรกไม่ได้บันทึกการกำหนดค่านี้ไว้ และฉันมีเพียงรายการคำสั่งที่ยังไม่สมบูรณ์เช่นกัน

ฉันมีสองไฟล์เหล่านี้: example_ca.crt และ ตัวอย่าง. crt

และใช้คำสั่ง OpenSSL นี้:

opensl x509 - ใน file_name.crt - ข้อความ - ไม่มี

นี่คือคุณสมบัติของมัน (ฉันจะละเว้นข้อมูลที่ไม่เกี่ยวข้อง):

example_ca.crt

ใบรับรอง:
    ข้อมูล:
        รุ่น: 3 (0x2)
        หมายเลขซีเรียล:
            cb:0f:b8:78:38:9a:a9:da
        อัลกอริทึมลายเซ็น: sha256WithRSAEncryption
        ผู้ออก: CN = example.org
        ความถูกต้อง
            ไม่ใช่ก่อน: 10 มิ.ย. 10:33:06 น. 2020 GMT
            ไม่ทัน : 17 พฤษภาคม 10:33:06 2120 GMT
        หัวเรื่อง: CN = example.org
        เรื่องข้อมูลคีย์สาธารณะ:
            อัลกอริทึมคีย์สาธารณะ: rsaEncryption
                คีย์สาธารณะ RSA: (2048 บิต)
                โมดูลัส:
                    [...]
                เลขชี้กำลัง: 65537 (0x10001)
        ส่วนขยาย X509v3:
            ตัวระบุคีย์เรื่อง X509v3: 
                81:FE:D0:6D:DE:0A:CC:10:1D:B3:74:EA:4B:C8:F3:43:37:B4:D1:FD
            ตัวระบุรหัสสิทธิ์ X509v3: 
                รหัสคีย์:81:FE:D0:6D:DE:0A:CC:10:1D:B3:74:EA:4B:C8:F3:43:37:B4:D1:FD

            X509v3 ข้อจำกัดพื้นฐาน: 
                คริส:จริง
    อัลกอริทึมลายเซ็น: sha256WithRSAEncryption
         [...]

ตัวอย่าง. crt

ใบรับรอง:
    ข้อมูล:
        รุ่น: 3 (0x2)
        หมายเลขซีเรียล:
            80:1d:bb:9e:9f:2c:4e:ce
        อัลกอริทึมลายเซ็น: sha256WithRSAEncryption
        ผู้ออก: CN = example.org
        ความถูกต้อง
            ไม่ใช่ก่อน: 10 มิ.ย. 10:33:44 น. 2020 GMT
            ไม่ทัน : 17 พฤษภาคม 10:33:44 2120 GMT
        หัวเรื่อง: CN = example.org
        เรื่องข้อมูลคีย์สาธารณะ:
            อัลกอริทึมคีย์สาธารณะ: rsaEncryption
                คีย์สาธารณะ RSA: (2048 บิต)
                โมดูลัส:
                    [...]
                เลขชี้กำลัง: 65537 (0x10001)
        ส่วนขยาย X509v3:
            X509v3 การใช้คีย์เพิ่มเติม: 
                การตรวจสอบไคลเอ็นต์เว็บ TLS, การตรวจสอบเซิร์ฟเวอร์เว็บ TLS
            ตัวระบุรหัสสิทธิ์ X509v3: 
                รหัสคีย์:81:FE:D0:6D:DE:0A:CC:10:1D:B3:74:EA:4B:C8:F3:43:37:B4:D1:FD

            ตัวระบุคีย์เรื่อง X509v3: 
                B1:2C:74:04:EE:03:84:C9:F7:92:35:CE:6E:20:EF:C6:FE:B8:23:A7
    อัลกอริทึมลายเซ็น: sha256WithRSAEncryption
         [...]

ฉันสามารถทำซ้ำได้ example_ca.crt ด้วยคำสั่งและการกำหนดค่าเหล่านี้ (วันหมดอายุไม่เกี่ยวข้อง):

openssl genrsa - ออก example_ca.key 2048
openssl req -new -x509 -days 365 -key example_ca.key -out example_ca.crt -config root.cnf

root.cnf

# การกำหนดค่า OpenSSL สำหรับ Root CA

[ ต้องการ ]

พรอมต์ = ไม่
string_mask = ค่าเริ่มต้น

default_bits = 2048
Distinuous_name = req_distinuous_name
x509_extensions = x509_ext

[ ชื่อเรียกซ้ำ ]
ชื่อสามัญ = example.org

[ x509_ext ]
ExtendedKeyUsage = clientAuth, serverAuth
subjectKeyIdentifier = แฮช
AuthorityKeyIdentifier = รหัสคีย์
ข้อจำกัดพื้นฐาน=CA:จริง

ปัญหาของฉันมาถึงจุดนี้เมื่อฉันไม่สามารถทำซ้ำได้ ตัวอย่าง. crtฉันได้ลองความเป็นไปได้มากมายใน server.cnf และ opensl.cnf ไฟล์และฉันไม่ได้เข้าใกล้ผลลัพธ์ที่ต้องการ

สำหรับขั้นตอนสุดท้าย ฉันใช้คำสั่งเหล่านี้:

openssl genrsa - ออก example.key 2048
opensl req -new -out example.csr -key example.key -config server.cnf

echo ExtendedKeyUsage = clientAuth > opensl.cnf
opensl x509 -req -in example.csr -out example.crt -signkey example.key -CA example_ca.crt -CAkey example_ca.key -CAcreateserial -วัน 365 -extfileopenssl.cnf

ฉันจะข้ามเนื้อหาของ server.cnf เพราะนั่นคือที่ที่ฉันต้องการความช่วยเหลือ แต่โดยพื้นฐานแล้วฉันมักจะคิดถึง "ส่วนขยาย X509v3" เซสชันของ ตัวอย่าง. crt

อย่าลังเลที่จะบังคับให้ใช้รหัสผ่านหากจำเป็น หรือเพื่อแก้ไขการจำลองของฉัน example_ca.crt ฉันได้อธิบายพื้นฐานอย่างง่ายๆ

อัปเดต:

server.cnf

# การกำหนดค่า OpenSSL สำหรับใบรับรองเอนทิตี

[ ต้องการ ]
พรอมต์ = ไม่
string_mask = ค่าเริ่มต้น

default_bits = 2048
Distinuous_name = req_distinuous_name

x509_extensions = x509_ext

[ req_distinguished_name ]
ชื่อสามัญ = example.org

[ x509_ext ]
keyUsage=สำคัญ,digitalSignature,keyAgreement

subjectAltName = @alt_names

สามารถใช้ชื่อสำรองได้หลายชื่อ
[alt_names]
DNS.1 = example.org
IP.1 = 127.0.0.1
# DNS.2 = altName.example.com
br flag
มันจะง่ายกว่าสำหรับคนที่จะช่วยคุณเกี่ยวกับ `server.cnf` หากคุณแสดงคำถามของคุณในคำถามของคุณ
dave_thompson_085 avatar
jp flag
อย่าใช้ `-signkey` ร่วมกับ `-CA -CAkey` -- ทั้งสองอย่างไม่สามารถมีผลกับใบรับรองเดียวกันได้ แต่แทนที่จะเกิดข้อผิดพลาด ดูเหมือนว่าจะทำให้ส่วนขยายซ้ำกัน (!!) และอาจทำให้สับสนได้เช่นกัน
dave_thompson_085 avatar
jp flag
นอกจากนี้: หากคุณใช้ชื่อที่แสดงจริงๆ คุณมี `CN=example.org` สำหรับ **ทั้ง** CA และเซิร์ฟเวอร์ สิ่งนี้จะไม่ทำงานเมื่อคุณพยายามใช้ใบรับรองเพื่ออะไร พวกเขาจะต้องแตกต่างกัน สำหรับ HTTPS (ฉันถือว่าโหลดบาลานเซอร์คือ HTTPS) CN ต้องเป็นชื่อโดเมนเมื่อไม่มี SAN (ซึ่งจะเป็นแนวทางปฏิบัติที่ดีกว่า แต่คุณไม่มี) ชื่อ CA ไม่จำเป็นต้องเป็นชื่อโดเมน (และไม่จำเป็นต้องเป็น CN ด้วยซ้ำ คุณสามารถใช้ O, OU และอื่นๆ ได้)
Willy avatar
in flag
ขอบคุณมาก! ฉันสามารถแก้ไขทุกอย่างได้ CN ยังไม่สรุปแน่ชัด เป็นเพียงตัวอย่างเท่านั้น
Score:0
ธง br

สร้าง local.cnf ไฟล์ที่มีบางสิ่งที่คล้ายกับ (ลบความคิดเห็นของฉันหากคุณต้องการ):

[เซิร์ฟเวอร์]

#คาดว่าสองคนนี้...
subjectKeyIdentifier=แฮช
AuthorityKeyIdentifier=keyid:เสมอ,ผู้ออก

# นี่เป็นวิธีที่ชาญฉลาดสำหรับเอนทิตีปลายทางและควรมีความสำคัญ:
# keyUsage = สำคัญ, digitalSignature, keyAgreement
# เลือก (อย่างชาญฉลาด) จาก: digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement, encipherOnly และ decipherOnly
# แต่ไม่ใช่ keyCertSign หรือ cRLSign เนื่องจากใช้สำหรับ CA

# นี่สำหรับใบรับรองเอนทิตีเท่านั้น
ExtendedKeyUsage = clientAuth, serverAuth
# เลือก (อย่างชาญฉลาด) จาก: https://www.openssl.org/docs/manmaster/man5/x509v3_config.html#Extended-Key-Usage

จากนั้น ใช้แฟล็กต่อไปนี้กับคุณ opensl x509 คำสั่งที่จะใช้:

opensl x509 ... -extfile local.cnf -extensions เซิร์ฟเวอร์
Willy avatar
in flag
ฉันทำตามที่คุณพูดแล้ว แต่มีรายละเอียดสองอย่าง ลำดับของ "subjectKeyIdentifier" และ "authorityKeyIdentifier" แตกต่างกันในแต่ละไฟล์ .crt ทำตามคำแนะนำของคุณ ลำดับจะเหมือนกันสำหรับทั้งสองไฟล์ ในทางกลับกัน ค่าของ "extendedKeyUsage" จะถูกทำซ้ำสองครั้ง ฉันได้อัปเดตคำถามเพื่อให้คุณเห็นเนื้อหาของ server.cnf แต่ฉันไม่ไว้ใจจริงๆ ว่าฉันทำถูกต้อง
dave_thompson_085 avatar
jp flag
ส่วนแรกของคุณผิด ถ้า `x509 -req` มี `-extfile` แต่ไม่มี `-extensions` ให้ใช้ค่าของ `extensions` จากส่วนเริ่มต้น (ซึ่ง OP ไม่มี) หรือส่วนเริ่มต้นเอง (ซึ่ง OP มี) . แต่คุณคิดถูกกับค่าที่ควรจะเป็น _in_ ส่วนที่ใช้ ไม่ว่าจะเป็นอะไรก็ตาม @Willy: เพื่อป้องกันส่วนขยายที่ซ้ำกัน ให้ลบ `-signkey` ตามที่ฉันแสดงความคิดเห็นในคำถาม
br flag
@dave_thompson_085 - ขอบคุณ ฉันแก้ไขมันแล้ว ทุกวันเป็นวันเรียน :-)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา