ฉันควรเซ็นรหัสโอเพนซอร์สด้วยตนเองหรือไม่


11

ฉันใช้ macOS 10.14 และเจอปัญหาเมื่อฉันพยายามติดตั้งปลั๊กอินโอเพนซอร์สสำหรับ Vim ที่ฉันพบใน Github ฉันดาวน์โหลดซอร์สโค้ดและรวบรวมด้วยตัวเองซึ่งทำงานได้ดี แต่เมื่อฉันรันมันการดำเนินการถูกขัดจังหวะเนื่องจาก "รหัสลายเซ็น [ของปฏิบัติการ] ไม่ถูกต้องสำหรับใช้ในกระบวนการ"

สิ่งนี้ทำให้ฉันมีคำถามมากมายที่ฉันไม่สามารถคาดหัวได้:

ฉันสามารถเซ็นชื่อด้วยตัวเอง แต่จะไม่ทำลายจุดประสงค์ของการเซ็นรหัสหรือไม่ มีความแตกต่างเชิงคุณภาพในการเซ็นรหัสจากอินเทอร์เน็ตและอนุญาตให้แอพจากนักพัฒนาที่ไม่ปรากฏหลักฐานในกล่องโต้ตอบ "แอพนี้ดาวน์โหลดจากอินเทอร์เน็ต" หรือไม่?

หากฉันไม่ทำเช่นนั้นใครคือผู้รับผิดชอบ "ลงชื่อ"? ผู้ดูแลพื้นที่เก็บข้อมูล? ผู้มีส่วนร่วม? Apple คาดหวังว่านักพัฒนาซอฟต์แวร์โอเพนซอร์สจะมีรหัสผู้พัฒนา Apple เสมอหรือไม่ หรือฉันเข้าใจผิดวัตถุประสงค์ของการลงรหัส?

แก้ไข:

เพื่อความชัดเจนคำถามของฉันคือฉันควรจัดการซอร์สโค้ดที่ไม่ได้ลงชื่อที่ฉันรวบรวมเองได้อย่างไรเนื่องจากฉันไม่ได้คาดหวังว่าผู้กระทำความผิดจะสามารถลงนามหรือจำรหัสผ่านของพวกเขาได้เสมอโดยเฉพาะอย่างยิ่ง กับผู้ติดต่อหลายคน

คำตอบ:


9

การลงโฆษณาแบบ Ad-Hoc

สำหรับการใช้งานของบุคคลที่สามและไบนารีที่คุณรวบรวมตัวเองและที่จำเป็นต้องมีการลงนามรหัสใช้เฉพาะกิจลายเซ็นรหัส

  • ฉันสมมติว่าแอปพลิเคชันจะไม่ทำงานหากไม่มีลายเซ็น
  • ฉันสมมติว่าแอปพลิเคชันจะไม่ถูกแจกจ่าย
  • ฉันสมมติว่าคุณไม่สนใจเกี่ยวกับตัวตนของลายเซ็นที่ถูกต้อง

ลายเซ็นเฉพาะกิจไม่ได้ให้ประโยชน์ด้านความปลอดภัยที่เชื่อถือได้ สามารถใช้เพื่อพิจารณาว่าแอปพลิเคชันมีการเปลี่ยนแปลงหรือไม่และสามารถใช้เพื่อใช้ข้อ จำกัด ด้านความปลอดภัยเช่นการให้สิทธิ์กับแอปพลิเคชัน

ลายเซ็นเฉพาะกิจจะทำการตรวจสอบแต่ไม่codesign spctlสิ่งนี้อาจจะหรืออาจไม่สำคัญขึ้นอยู่กับไบนารีที่กำลังเซ็นชื่อ สำหรับแอปพลิเคชันและไฟล์ที่เรียกใช้งานสิ่งนี้ไม่น่าเป็นเรื่องสำคัญเนื่องจากspctlไม่ได้ทำงานบนไบนารีที่สร้างขึ้นในเครื่อง

ทำไมต้องเซ็นรหัส

เกี่ยวกับคำถามกลั่น:

ฉันควรจัดการซอร์สโค้ดที่ไม่ได้ลงนามที่ฉันรวบรวมเองได้อย่างไรเนื่องจากฉันไม่คาดหวังว่าผู้กระทำความผิดจะสามารถลงนามหรือจำรหัสผ่านของพวกเขาได้โดยเฉพาะอย่างยิ่งเมื่อมันมีส่วนร่วมเพียงเล็กน้อยในโครงการโอเพ่นซอร์ส

สำหรับแอปพลิเคชันที่รวบรวมด้วยตนเองส่วนใหญ่ไม่จำเป็นต้องมีการเซ็นชื่อรหัส สิ่งนี้จะถือว่าคุณเชื่อถือรหัสของแอปพลิเคชัน บน MacOS คุณสามารถเปิดการใช้งานที่ไม่น่าเชื่อถือจาก Finder ดูแอปเปิ้ลเปิดแอปจากนักพัฒนาที่ไม่ปรากฏชื่อ

หากคุณไม่เชื่อถือรหัสหรือนักพัฒนาอย่ารวบรวมหรือเรียกใช้แอปพลิเคชัน

ความรับผิดชอบของคุณ

ผู้ให้บริการของซอร์สโค้ดไม่มีความรับผิดชอบหรือภาระผูกพันในการจัดเตรียมไบนารีที่ลงนามโค้ดไว้ล่วงหน้า การรวบรวมด้วยตนเองการเซ็นรหัสทั้งหมดเป็นตัวเลือกและความรับผิดชอบของคุณ

  • Apple ต้องการให้ส่งไปที่ App Store เพื่อลงนามรหัส

  • Apple ร้องขอนักพัฒนานอกแอพสโตร์ของพวกเขาเซ็นรหัส แต่ก็ยังไม่จำเป็น

ในทั้งสองกรณีจะมีการลงชื่อเฉพาะไบนารีสุดท้ายเท่านั้น รหัสต้นฉบับและทรัพยากรไม่ได้ลงนาม

รหัสที่มาไม่ได้ลงนาม

ซอร์สโค้ดเองไม่สามารถลงชื่อในโค้ดอย่างมีความหมายสำหรับ macOS ไฟล์และรหัสต้นฉบับสามารถเซ็นชื่อแบบดิจิทัลได้เช่นเดียวกับไฟล์อื่น ๆ แต่สิ่งนี้ไม่ส่งผลกระทบต่อวิธีที่แอปพลิเคชันหรือไบนารีที่ได้รับการปฏิบัติโดย macOS

วิธี Ad-Hoc Code ลงนามใน Mac Application

ในการกำหนดรหัสแอปพลิเคชันบน macOS ด้วยลายเซ็น ad-hoc ให้ตั้งค่า-sสถานะidentity เป็น-:

codesign --force -s - </path/to/application>

กฎข้อกำหนดและการเปลี่ยนลำดับอื่น ๆ ทั้งหมดcodesignยังคงเหมือนเดิม

การตั้งค่าสถานะ--forceใช้ที่นี่เพื่อเขียนทับลายเซ็นที่มีอยู่

คุณอาจต้องเพิ่มการ--deepตั้งค่าสถานะลงในcodesignคำสั่งเพื่อลงนามทรัพยากรย่อยเช่นกรอบงานและบริการแบบฝัง


ทำไมคุณถึงแนะนำลายเซ็นเฉพาะกิจ คำตอบที่คุณเชื่อมโยงกับสถานะ "ในทางปฏิบัติการสร้างไบนารีที่เซ็นชื่อแบบเฉพาะกิจนั้นมีคุณค่าสำหรับผู้พัฒนา Apple เท่านั้น"
Wowfunhappy

นั่นไม่สมเหตุสมผลเลยสำหรับฉัน การเพิ่มลายเซ็นเฉพาะกิจหมายความว่าการตรวจสอบลายเซ็นจะล้มเหลว สิ่งนี้ทำให้คุณไม่มีที่ติ - โปรแกรมจะล้มเหลวพร้อมกับข้อความแสดงข้อผิดพลาดเดียวกัน
jksoegaard

ใช่ฉันเห็นว่าคุณได้ลบลิงก์ไปยังคำตอบของฉันเกี่ยวกับการลงชื่อเข้าใช้แบบเฉพาะกิจและเพิ่มสมมติฐาน แต่สมมติฐานเหล่านี้มีไว้ทั้งหมดหรือไม่ - ดูเหมือนว่าคุณกำลังตอบคำถามราวกับว่าคำถามเกี่ยวกับการเรียกใช้แอปพลิเคชัน มันไม่ใช่. มันเกี่ยวกับการมีแอพพลิเคชั่นที่ลงนามแล้วซึ่ง OP ต้องการเพิ่มปลั๊กอิน คือปลั๊กอินจะต้องผ่านการตรวจสอบห้องสมุดด้วยแอปพลิเคชั่นที่ลงนามครั้งแรก (Vim) เป็นหลัก
jksoegaard

คำถามเดิมได้รับการแก้ไขแล้ว มันค่อนข้างกว้างเหมือนที่เป็นอยู่ ผู้ถามสามารถแสดงความคิดเห็นชี้แจงและลองคำตอบเหล่านี้เพื่อดูว่าอะไรทำงานได้ดีสำหรับพวกเขา คำตอบนี้พยายามตอบคำถามที่แก้ไขแล้วและให้แนวทางปฏิบัติ ถ้ามันไม่ได้ช่วยหรือมีข้อสันนิษฐานที่ไม่ถูกต้องผู้ถามก็สามารถคาดหวังและอธิบายความตั้งใจของพวกเขาได้
Graham Miln

1
คำตอบนี้มีประโยชน์ คำถามของฉันค่อนข้างทั่วไปเพราะฉันพบว่าแอปเปิ้ลเป็นเอกสารที่เข้าใจยาก การใช้การลงชื่อแบบเฉพาะกิจจะช่วยแก้ไขปัญหาเฉพาะที่ฉันมีได้
ไวยากรณ์

5

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

ความแตกต่างเชิงคุณภาพระหว่างการเซ็นชื่อไบนารีแอปพลิเคชันด้วยตัวคุณเองและเพียงแค่อนุญาตให้แอปจากนักพัฒนาที่ไม่ปรากฏหลักฐานใน GateKeeper นั่นคือในอดีตคุณอนุญาตให้แอปพลิเคชั่นเดียวที่เฉพาะเจาะจงทำงานได้ แอพที่แตกต่างกันเพียงแค่คลิกขวาที่พวกเขาแล้วเลือกเปิด นั่นคือมีข้อ จำกัด มากขึ้นและทำให้ "ปลอดภัย" กว่าเดิมด้วยการลงนามในโปรแกรมเฉพาะด้วยตนเอง

ความรับผิดชอบในการเซ็นชื่อเป็นของคุณทั้งหมด ผู้พัฒนาโอเพ่นซอร์สไม่สามารถลงนามซอร์สโค้ดได้มีความเป็นไปได้ที่จะเซ็นชื่อไบนารีที่รวบรวมไว้เท่านั้น ในขณะที่คุณสร้างไบนารีที่รวบรวมด้วยตัวคุณเอง

คุณสามารถลงทะเบียนบัญชีนักพัฒนาซอฟต์แวร์บนเว็บไซต์ของ Apple ที่จะช่วยให้คุณสร้างใบรับรองที่สามารถใช้สำหรับการลงนาม หากคุณเป็นนักพัฒนาซอฟต์แวร์และรวบรวมไบนารีเพื่อใช้งานบน Mac เป็นประจำนี่เป็นวิธีที่เหมาะสมในการทำสิ่งต่างๆ หากนี่เป็นสิ่งที่คุณอาจไม่เคยทำอีกครั้งมันอาจเกินความเป็นไปได้ที่จะทำตามขั้นตอนนี้ YMMV

คำตอบอื่น ๆ สำหรับคำถามของคุณที่นี่แนะนำให้คุณใช้การเซ็นชื่อแบบเฉพาะกิจสำหรับไบนารีของคุณ ที่จะไม่ทำงาน คุณจะต้องสร้างลายเซ็นที่ถูกต้องเพื่อให้ไบนารีทำงานกับ GateKeeper ในการตั้งค่าที่ปลอดภัยที่สุด


1

ฉันควรเซ็นรหัสโอเพนซอร์สด้วยตนเองหรือไม่

หากคุณไม่ใช่นักพัฒนาซอฟต์แวร์ก็ไม่ใช่

สรุปรหัสเป็นวิธีที่จะบอกคุณ (นักพัฒนา) เป็นคนที่คุณพูดว่าคุณเป็นและรหัสไม่ได้เปลี่ยนไปตั้งแต่คุณลงชื่อครั้งสุดท้าย

มีความแตกต่างเชิงคุณภาพในการเซ็นรหัสจากอินเทอร์เน็ตและอนุญาตให้แอพจากนักพัฒนาที่ไม่ปรากฏหลักฐานในกล่องโต้ตอบ "แอพนี้ดาวน์โหลดจากอินเทอร์เน็ต" หรือไม่?

ดูเหมือนว่าการลงนามรหัสที่สับสนของคุณ (สิ่งที่ผู้พัฒนาต้องการเพื่อเผยแพร่แอพใน App Store) และGatekeeper (สิ่งที่ปกป้อง Mac ของคุณจากการติดตั้งซอฟต์แวร์จากผู้พัฒนาที่ไม่ระบุชื่อ)

หากคุณอนุญาตให้ Mac ของคุณติดตั้งซอฟต์แวร์จากทั้ง App Store และผู้พัฒนาที่ได้รับการระบุคุณจะยังคงได้รับป๊อปอัพแจ้งเตือนคุณถึงซอฟต์แวร์จริงที่จะถูกติดตั้ง

และหากมาจากนักพัฒนาที่ไม่ปรากฏหลักฐานคุณจะได้รับป๊อปอัปเดียวกันกับ "ไอคอนเตือน"

คุณยังคงสามารถติดตั้งซอฟต์แวร์ได้ นี่เป็นเพียงกลไกที่บังคับให้ผู้ใช้โต้ตอบเพื่อติดตั้งซอฟต์แวร์จริง ๆ เพื่อมอบความปลอดภัยให้กับคุณจากมัลแวร์ที่ติดตั้งด้วยตนเอง


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