เป็นส่วนหนึ่งของการใช้งานการบู๊ตอย่างปลอดภัยของ linux โดยใช้ การตรวจสอบลายเซ็น dm-verity และรูทแฮชฉันต้องเซ็นชื่อไฟล์ด้วยคำสั่ง opensl ต่อไปนี้ (ตัวอย่าง):
openssl smime -sign -nocerts -noattr -binary -in unsigned.txt -inkey private.key -signer cert.pem -outform der -out Signed.txt
สิ่งนี้จะสร้างไฟล์ PKCS#7 ซึ่งสามารถประมวลผลได้สำเร็จโดยเคอร์เนล linux
แต่สำหรับการผลิตเราไม่ใช้ opensl แต่ เซิร์ฟเวอร์ลายเซ็น PrimeKey (ซึ่งขึ้นอยู่กับ bouncycastle) พร้อมผู้ลงนาม CMS ที่นี่ ฉันไม่สามารถกำหนดค่าผู้ลงนาม CMS เพื่อสร้าง PKCS#7 ที่ใช้งานได้จนถึงตอนนี้ ปัญหาคือความแตกต่างในdigest_enc_algorithmดังที่เห็นในภาพด้านล่าง (ซ้าย: signserver ขวา: openssl)
ปัญหาก็คือว่า เคอร์เนลจะไม่รองรับ OID นั้น. เพียงแค่เพิ่ม sha256WithRsaEncryption ไปที่สวิตช์ก็แก้ไขปัญหาได้ แต่ฉันไม่แน่ใจว่านี่เป็นวิธีแก้ไขที่ถูกต้องหรือไม่
"การแก้ไข" อีกอย่างที่ฉันพบคือการแทนที่ OID ของไฟล์ PKCS#7 ที่ลงชื่อ ซึ่งทำให้เกิดคำถามสองสามข้อสำหรับฉันด้วย!
ตอนนี้คำถามของฉัน:
- มีความแตกต่างระหว่าง rsaEncryption และ sha256WithRsaEncryption ในบริบทนั้นหรือไม่
- เหตุใดจึงแก้ไขไฟล์ PKCS#7 และทุกอย่างทำงานได้ดี
- มันจะเป็นการแก้ไขที่ถูกต้องหรือไม่ที่จะเพิ่ม OID ในกรณีสวิตช์ในเคอร์เนล (อย่างน้อยจากมุมมองของการเข้ารหัสลับ)
ขอบคุณสำหรับการสนับสนุนของคุณ!
อัปเดต: พบปัญหานี้ ใน Backlog ของ PrimeKey signserver