จะตรวจสอบว่าไฟล์. sig นั้นถูกต้องได้อย่างไร?


1

ฉันออกคำสั่งต่อไปนี้เพื่อสร้างลายเซ็นสำหรับไฟล์ (เคอร์เนล Linux):

openssl req -newkey rsa -keyout codesign.key -out codesign.req
openssl ca -config ca.cnf -extensions codesigning -in codesign.req -out codesign.crt

openssl cms -sign -binary -noattr -in vmlinuz -signer codesign.crt -inkey codesign.key -certfile ca.crt -outform DER -out vmlinuz.sig

ca.cnf ไฟล์สำหรับโครงสร้างพื้นฐาน CA ส่วนตัวของฉันเองและมีส่วนขยายการใช้คีย์ digitalSignature และเปิดใช้งานส่วนขยายการใช้คีย์นามสกุล codeSigning

รูปแบบ Ca.cnf:

[ca]

default_ca = ca_default

[ca_default]

ใบรับรอง = ca.crt

private_key = ca.key

serial = ca.srl

ฐานข้อมูล = ca.idx

new_certs_dir = / home / apoorv / โปรเจ็กต์ / ลงนาม

default_md = ค่าเริ่มต้น

policy = policy_anything

ถนอม = ใช่

default_days = 90

unique_subject = no

[นโยบาย _ ทุกอย่าง]

countryName = เป็นทางเลือก

stateOrProvinceName = เป็นทางเลือก

localityName = เป็นทางเลือก

OrganizationName = เป็นทางเลือก

enterpriseUnitName = เป็นทางเลือก

commonName = เป็นทางเลือก

emailAddress = เป็นทางเลือก

[ข้าม]

basicConstraints = critical, CA: true

keyUsage = สำคัญ, cRLSign, keyCertSign

[Codeigning]

keyUsage = digitalSignature

ExtendedKeyUsage = codeSigning

คำสั่ง: openssl cms - ยืนยัน -binary -content vmlinuz -inform DER -in vmlinuz.sig -CAfile ca.crt

เอาท์พุท:

การตรวจสอบล้มเหลว 140187569694352: ข้อผิดพลาด: 2E099064: รูทีน CMS: CMS_SIGNERINFO_VERIFY_CERT: ข้อผิดพลาดในการตรวจสอบใบรับรอง: cms_smime.c: 287: ตรวจสอบข้อผิดพลาด: วัตถุประสงค์ของใบรับรองที่ไม่สนับสนุน

คุณช่วยกรุณาป้อนข้อมูลใด ๆ ได้บ้าง ?? ขอบคุณมาก.

คำตอบ:


1

ควรจะชัดเจนจาก manpage ในระบบของคุณ หรือออนไลน์ สมมติว่าใบรับรอง CA ที่ระบุใน ca.cnf ของคุณคือ ca.crt และเป็นใบรับรองหลักฟังก์ชันพื้นฐานที่คุณต้องการคือ

openssl cms -verify -binary -content vmlinuz -inform der -in vmlinuz.sig -CAfile ca.crt 

ยกเว้นโดยค่าเริ่มต้นจะต้องใช้ ExtendedKeyUsage หากมี "emailProtection" id-pkix 3 4 ไม่ได้ (แต่เพียงผู้เดียว) codeSigning; เพื่อแทนที่ที่เพิ่ม -purpose any.

หากลำดับชั้นใบรับรองมีความซับซ้อนมากขึ้น - เช่นถ้าใช้ลูกโซ่ - จะมีหลายกรณีขึ้นอยู่กับใบรับรองที่คุณรวมอยู่ในไฟล์ลายเซ็นด้วย -certfileสิ่งที่ใบรับรองอยู่ในไฟล์และ / หรือไดเรคทอรีเริ่มต้นของคุณหรือที่ระบุและ -certfile ถ้าใช้และไม่ว่าคุณจะระบุ -partial_chain ใน 1.0.2 ขึ้นไปและไม่มีคำถามที่เฉพาะเจาะจงมากขึ้นฉันไม่มีเวลาเขียนมากนัก


ฉันอัพเดตคำถามของฉัน คุณช่วยดูหน่อยได้ไหม? ขอบคุณเดฟ :)
entropy

ขอบคุณมาก @ dave_thompson_085 ที่ช่วย การเพิ่มวัตถุประสงค์ - ตัวเลือกใด ๆ แก้ไขปัญหาของเรา
entropy

@apoorvmunshi คุณยินดี แต่วิธี StackExchange คือการทำเครื่องหมายยอมรับและ / หรือลงคะแนน ตามที่กล่าวไว้ในลิงค์นี้ มากกว่า 'ขอบคุณ'
dave_thompson_085

@ dave_thompson_085 ... และอาจจะโหวตเกินไป แต่ถ้าพวกเขาโหวตขึ้น ... คุณจะเหนียวแน่นโดยไม่ต้องเป็น ฮีโร่ที่ไม่ได้ร้อง :-)
Hastur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.