การลงชื่อไฟล์ Windows EXE


180

ฉันมีไฟล์EXEที่ฉันต้องการลงชื่อเพื่อที่ Windows จะไม่เตือนผู้ใช้ปลายทางเกี่ยวกับแอปพลิเคชันจาก "ผู้เผยแพร่ที่ไม่รู้จัก" ฉันไม่ใช่นักพัฒนา Windows แอปพลิเคชันที่สงสัยคือสกรีนเซฟเวอร์ที่สร้างจากแอปพลิเคชันที่สร้างแอปพลิเคชั่นสกรีนเซฟเวอร์ เช่นนี้ฉันไม่มีผลต่อวิธีการสร้างไฟล์

ฉันพบแล้วว่าฉันจะต้องมีใบรับรองการลงนามรหัสจากCAเช่นVerisignหรือ instantssl.com สิ่งที่ฉันไม่เข้าใจคือสิ่งที่ฉันต้องทำ (ถ้าเป็นไปได้ทั้งหมด) เพื่อลงชื่อไฟล์ EXE ของฉัน คำอธิบายง่ายๆคืออะไร

คำตอบของ Mel Green พาฉันไปไกลกว่านี้ แต่ signtool ต้องการให้ฉันระบุใบรับรองที่จะใช้ในกรณีใด ๆ ฉันจะได้รับใบรับรองการลงนามรหัสฟรีเพื่อทดสอบว่าสิ่งนี้จะใช้ได้กับฉันหรือไม่?

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


3
แค่อยากรู้อยากเห็น - เท่าไหร่ต้องจ่ายเพื่อซื้อใบรับรอง?
InTheNameOfScience

2
@Rigel ประมาณ $ 400 ต่อปีอาจจะไม่คุ้มค่า :)
Sharan Arumugam

@SharanArumugam: WHAAT ?????? มันเป็นเหมือน Microsfot กับซอฟต์แวร์ราคาถูก / ฟรี!
InTheNameOfScience

คำตอบ:


116

คุณสามารถลองใช้เครื่องมือลงชื่อของ Microsoft

คุณดาวน์โหลดเป็นส่วนหนึ่งของ Windows SDK สำหรับ Windows Server 2008 และ. NET 3.5 เมื่อดาวน์โหลดแล้วคุณสามารถใช้งานได้จากบรรทัดคำสั่งดังนี้:

signtool sign / a MyFile.exe

สิ่งนี้จะลงนามในไฟล์เรียกใช้งานเดียวโดยใช้ "ใบรับรองที่ดีที่สุด" ที่มีอยู่ (หากคุณไม่มีใบรับรองก็จะแสดงข้อความข้อผิดพลาด SignTool)

หรือคุณสามารถลอง:

signtool signwizard

วิธีนี้จะเปิดตัวช่วยสร้างที่จะแนะนำคุณในการลงชื่อสมัครใช้ (ตัวเลือกนี้ไม่สามารถใช้ได้หลังจาก Windows SDK 7.0)


หากคุณต้องการที่จะได้รับถือของใบรับรองที่คุณสามารถใช้เพื่อทดสอบกระบวนการของการลงนามในปฏิบัติการที่คุณสามารถใช้เครื่องมือสุทธิmakecert

เครื่องมือสร้างใบรับรอง (Makecert.exe)

เมื่อคุณสร้างใบรับรองของคุณเองและใช้มันเพื่อลงนามในการปฏิบัติการของคุณคุณจะต้องเพิ่มมันด้วยตนเองเป็น Trusted Root CA สำหรับเครื่องของคุณเพื่อให้UACบอกผู้ใช้ว่ามันมาจากแหล่งที่เชื่อถือได้ สำคัญ การติดตั้งใบรับรองเนื่องจาก ROOT CA จะเป็นอันตรายต่อความเป็นส่วนตัวของผู้ใช้ของคุณ ดูสิ่งที่เกิดขึ้นกับ DELL คุณสามารถค้นหาข้อมูลเพิ่มเติมสำหรับการทำสิ่งนี้ให้สำเร็จทั้งในรหัสและผ่าน Windows ใน:

หวังว่าจะให้ข้อมูลเพิ่มเติมสำหรับทุกคนที่พยายามทำเช่นนี้!


เวิร์กโฟลว์การทำงานในคำถามแยกต่างหาก: stackoverflow.com/questions/84847/…
The_Ghost

4
"เครื่องมือนี้ติดตั้งโดยอัตโนมัติด้วย Visual Studio เมื่อต้องการเรียกใช้เครื่องมือให้ใช้พรอมต์คำสั่งสำหรับนักพัฒนา (หรือพรอมต์คำสั่งของ Visual Studio ใน Windows 7)" msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
Westy92

อยากรู้อยากเห็นมากเกี่ยวกับใบรับรองที่ใช้โดย signtool เช่นกัน
Overdrivr

1
ตัวเลือก "signwizard" ไม่สามารถใช้งานได้หลังจาก Windows SDK 7.0
Omar Reis

Makecert เลิกใช้แล้วและควรใช้ PowerShell cmdlet New-SelfSignedCertificate เพื่อสร้างใบรับรองการทดสอบแทน รายละเอียดในstackoverflow.com/a/51443366/38117911 (ตอบคำถามที่ลิงก์โดย The_Ghost)
Alexander Revo

35

ฉันมีสถานการณ์เดียวกันในงานของฉันและนี่คือผลการวิจัยของเรา

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

นี่คือข้อดีข้อเสียของ 2 ตัวเลือก

ซื้อใบรับรอง

  • ข้อดี
    • การใช้ใบรับรองที่ออกโดย CA (Certificate Authority) จะทำให้มั่นใจได้ว่า Windows จะไม่เตือนผู้ใช้ปลายทางเกี่ยวกับแอปพลิเคชันจาก "ผู้เผยแพร่ที่ไม่รู้จัก" บนคอมพิวเตอร์เครื่องใดก็ตามที่ใช้ใบรับรองจาก CA (โดยปกติแล้วระบบปฏิบัติการ )
  • จุดด้อย:
    • มีค่าใช้จ่ายในการขอใบรับรองจาก CA

สร้างใบรับรองโดยใช้ Makecert

  • ข้อดี:
    • ขั้นตอนนั้นง่ายและคุณสามารถแบ่งปันใบรับรองกับผู้ใช้ปลายทางได้
  • จุดด้อย:
    • ผู้ใช้จะต้องติดตั้งใบรับรองด้วยตนเองบนเครื่องของพวกเขาและขึ้นอยู่กับลูกค้าของคุณว่าอาจไม่มีตัวเลือก
    • ใบรับรองที่สร้างด้วย makecert มักใช้สำหรับการพัฒนาและทดสอบไม่ใช่การผลิต

ลงชื่อไฟล์เรียกทำงาน

การเซ็นชื่อไฟล์ที่คุณต้องการมีสองวิธี:

  • การใช้ใบรับรองที่ติดตั้งบนคอมพิวเตอร์

    signtool.exe ลงชื่อ / a / s MY / sha1 sha1_thumbprint_value / t http://timestamp.verisign.com/scripts/timstamp.dll / v "C: \ filename.dll"

    • ในตัวอย่างนี้เรากำลังใช้ใบรับรองที่เก็บไว้ในโฟลเดอร์ส่วนบุคคลที่มีรหัสประจำตัว SHA1 (รหัสประจำตัวนี้มาจากใบรับรอง) เพื่อลงนามไฟล์ที่อยู่ที่ "C: \ filename.dll"
  • การใช้ไฟล์ใบรับรอง

    signtool sign / tr http://timestamp.digicert.com / td sha256 / fd sha256 / f "c: \ path \ to \ mycert.pfx" / p pfxpassword "c: \ path \ to \ file.exe"

    • ในตัวอย่างนี้เราใช้ใบรับรอง "c: \ path \ to \ mycert.pfx" ด้วยรหัสผ่าน pfxpassword เพื่อเซ็นชื่อไฟล์ "c: \ path \ to \ file.exe"

ทดสอบลายเซ็นของคุณ

วิธีที่ 1: การใช้ signtool

ไปที่: เริ่ม> เรียกใช้ประเภท CMD> คลิกตกลงที่พรอมต์คำสั่งป้อนไดเรกทอรีที่มีอยู่ signtool เรียกใช้ต่อไปนี้:

signtool.exe ตรวจสอบ / pa / v "C: \ filename.dll"

วิธีที่ 2: การใช้ Windows

คลิกขวาที่ไฟล์ที่เซ็นชื่อเลือกคุณสมบัติเลือกแท็บลายเซ็นดิจิทัล ลายเซ็นจะปรากฏในส่วนรายการลายเซ็น

ฉันหวังว่านี่จะช่วยคุณได้

แหล่งที่มา:


ดีใจที่ฉันสามารถช่วย @PhilLab
Erick Castrillo

โปรดระบุ $$$ ด้วย ขอบคุณ!
InTheNameOfScience

1
@WeGoToMars ฉันคิดว่าบทความนี้สามารถช่วยคุณcheapsslsecurity.com/sslproducts/codesigningcertificate.htmlหรือที่นี่digicert.com/code-signing
Erick Castrillo

31

คุณสามารถขอรับใบรับรองการลงนามรหัสราคาถูกฟรีจาก Certumหากคุณกำลังพัฒนาโอเพนซอร์ซ

ฉันใช้ใบรับรองของพวกเขามานานกว่าหนึ่งปีแล้วและได้ลบข้อความผู้เผยแพร่ที่ไม่รู้จักออกจาก Windows

เท่าที่ฉันใช้รหัสsigntool.exeจากสคริปต์เช่นนี้:

signtool.exe sign /t http://timestamp.verisign.com/scripts/timstamp.dll /f "MyCert.pfx" /p MyPassword /d SignedFile.exe SignedFile.exe

3
มันไม่ได้ดูฟรีอีกต่อไป แต่ก็ถูกกว่ามาก€ 14
hultqvist

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

4
นั่นคือ€ 25.00 ตอนนี้หรือไม่ ( en.sklep.certum.pl/data-safety/code-signing-certificates/… )
ewerybody

ร้าน Certum บอกว่าใบรับรองโอเพ่นซอร์สจะไม่ลบข้อความ Microsoft SmartScreen Filter
Markus Laire

17

ASP ของนิตยสาร ASP มีคำอธิบายโดยละเอียดเกี่ยวกับวิธีลงชื่อรหัส (คุณต้องเป็นสมาชิกเพื่ออ่านบทความ) คุณสามารถดาวน์โหลดได้ผ่านhttp://www.asp-shareware.org/

นี่คือเชื่อมโยงไปยังคำอธิบายวิธีที่คุณสามารถให้ใบรับรองการทดสอบของคุณเอง

สิ่งนี้อาจน่าสนใจ


7
ภาคผนวกสี่ปีต่อมา: โคโมโดถูกบุกรุกในช่วงต้นปี 2012 ( blogs.comodo.com/it-security/data-security/ … ) และตัวแทนผู้ใช้จำนวนมากจึงปฏิเสธใบรับรองที่มีสิทธิ์ราก Comodo
A. Wilson

8
โคโมโดยังคงเป็นเดิมพันที่มีความเสี่ยงในช่วงกลางปี ​​2013 และโดย 'ตัวแทนผู้ใช้' นั่นหมายถึง Microsoft / Windows เนื่องจากเป็นผู้ตัดสินใจว่าจะแสดงข้อความ 'ผู้เผยแพร่ที่ไม่รู้จัก' หรือไม่
Dan W

ขออภัยลบคำแนะนำบริการที่ชัดเจนออกซึ่ง ได้แก่ 1) ล้าสมัยและ 2) ถูกตัดออกจากหัวข้อในขณะนี้ (เพราะ 1. )
หลอกลวง

10

อีกตัวเลือกหนึ่งถ้าคุณจำเป็นต้องเข้าสู่ระบบปฏิบัติการบนกล่อง Linux คือการใช้signcodeจากเครื่องมือโครงการโมโน มันเป็นเรื่องที่ได้รับการสนับสนุนบน Ubuntu


1
นั่นเป็นประโยชน์มาก! แพคเกจที่มีอยู่ใน Debian เป็นอย่างดีภายใต้ชื่อโมโน devel
Marian

8

ข้อมูลอ้างอิงhttps://steward-fu.github.io/website/driver/wdm/self_sign.htm หมายเหตุ: signtool.exe จาก Microsoft SDK

1. ครั้งแรก (เพื่อให้ใบรับรองส่วนตัว)

Makecert -r -pe -ss YourName YourName.cer

certmgr.exe เพิ่ม YourName.cer -s -r localMachine root

2.After (เพื่อเพิ่มเครื่องหมายของคุณไปยังแอปของคุณ)

signtool ลงชื่อ / s YourName YourApp.exe


4

และยังมีอีกตัวเลือกหนึ่งถ้าคุณพัฒนาบน Windows 10 แต่ไม่ได้ติดตั้ง signtool.exe ของ Microsoft คุณสามารถใช้ Bash บน Ubuntu บน Windows เพื่อลงชื่อแอปของคุณ นี่คือการทำงาน:

https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/


osslsigncodeยังมีให้บริการในส่วนล่างcygwinดังนั้นหากคุณใช้งาน (เช่นฉัน) อยู่แล้วคุณสามารถลงชื่อเข้าใช้ในสภาพแวดล้อมปัจจุบันของคุณแทนที่จะต้องเปลี่ยนเป็น WSL
thoni56

4

ใช้ลิงค์ต่อไปนี้เพื่อเซ็นชื่อไฟล์. exe (setup / installer) (ลงชื่อไฟล์ exe / setup โดยไม่ต้องใช้ Microsoft setup signtool)

https://ebourg.github.io/jsign/#files

คำสั่งตัวอย่าง java -jar jsign-2.0.jar --keystore keystore.jks "- นามแฝงนามแฝง - รหัสผ่าน storestore MyInstaller.exe

ทำงานให้ฉัน :)


3

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

ดังนั้นราคาสำหรับลายเซ็น EV:

1 ปี $ 350 + (ค่าธรรมเนียมซ่อนเร้น $ 50)
2 ปี $ 600
3 ปี $ 750
[www.ksoftware.net] [3]
eToken ส่งเป็นแท่ง USB ไม่จำเป็นต้องอ่าน
คุณซื้อจริงจาก Comodo (Sectigo)

1 ปี 350 ยูโร
3 ปี 799 ยูโร
sklep.certum.pl

1 ปี $ 499 USD
3 ปี $ 897 USD
sectigo.com

1 ปี $ 410 รวม
2 ปี $ 760 รวม
3 ปี $ 950 รวม
www.globalsign.com

1 ปี: $ 600 (มันคือ $ 104)
3 ปี:
www.digicert.com

1 ปี: $ 700
3 ปี: ราคาแพงไร้สาระ
[ https://trustcenter.websecurity.symantec.com/]

ราคาเพิ่มเติมได้ที่นี่:
https://cheapsslsecurity.com/sslproducts/codesigningcertificate.html


ดูลิงค์ที่เพิ่มโดย Erick Castrillo: cheapsslsecurity.com/sslproducts/codesigningcertificate.html

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