Ký một tệp Windows EXE


180

Tôi có một tệp EXE mà tôi muốn ký để Windows sẽ không cảnh báo người dùng cuối về một ứng dụng từ một "nhà xuất bản không xác định". Tôi không phải là nhà phát triển Windows. Ứng dụng được đề cập là một trình bảo vệ màn hình được tạo từ một ứng dụng tạo các ứng dụng bảo vệ màn hình. Như vậy tôi không có ảnh hưởng đến cách tạo tập tin.

Tôi đã phát hiện ra rằng tôi sẽ cần chứng chỉ ký mã từ CA như Verisign hoặc instantssl.com. Điều tôi không hiểu là những gì tôi cần làm (nếu có thể) để ký vào tệp EXE của mình. Một lời giải thích đơn giản là gì?

Câu trả lời của Mel Green đưa tôi đi xa hơn, nhưng signtool muốn tôi chỉ định sử dụng chứng chỉ nào trong mọi trường hợp. Tôi có thể lấy chứng chỉ ký mã miễn phí bằng cách nào đó để kiểm tra xem điều này có hiệu quả với tôi không?

Ngoài ra, vui lòng xác định loại chứng chỉ nào là đúng. Hầu hết các trang web chỉ đề cập đến "ký mã" và nói về việc ký các ứng dụng thực sự được biên dịch bởi người dùng. Đây không phải là trường hợp của tôi.


3
Chỉ tò mò - người ta phải trả bao nhiêu tiền để mua chứng chỉ?
InTheNameOfScience

2
@Rigel khoảng $ 400 một năm, có lẽ không đáng :)
Sharan Arumugam

@SharanArumugam: CÁI GÌ ?????? Nó giống như microsfot chống lại phần mềm giá rẻ / miễn phí!
InTheNameOfScience

Câu trả lời:


116

Bạn có thể thử sử dụng Công cụ ký của Microsoft

Bạn tải xuống dưới dạng một phần của SDK Windows cho Windows Server 2008 và .NET 3.5. Sau khi tải về, bạn có thể sử dụng nó từ dòng lệnh như vậy:

ký hiệu signtool / một MyFile.exe

Điều này ký một thực thi duy nhất, sử dụng "chứng chỉ tốt nhất" có sẵn. (Nếu bạn không có chứng chỉ, nó sẽ hiển thị thông báo lỗi SignTool.)

Hoặc bạn có thể thử:

signtool đăng nhập

Điều này sẽ khởi chạy một trình hướng dẫn sẽ đưa bạn qua việc ký đơn. (Tùy chọn này không khả dụng sau Windows SDK 7.0.)


Nếu bạn muốn có một chứng chỉ mà bạn có thể sử dụng để kiểm tra quá trình ký tên thực thi của mình, bạn có thể sử dụng công cụ .NET Makecert .

Công cụ tạo chứng chỉ (Makecert.exe)

Khi bạn đã tạo chứng chỉ của riêng mình và đã sử dụng nó để ký tên thực thi của mình, bạn sẽ cần thêm thủ công dưới dạng CA gốc đáng tin cậy cho máy của mình để UAC thông báo cho người dùng đang chạy nó từ một nguồn đáng tin cậy. Quan trọng . Cài đặt chứng chỉ vì ROOT CA sẽ gây nguy hiểm cho quyền riêng tư của người dùng của bạn. Hãy nhìn những gì đã xảy ra với DELL. Bạn có thể tìm thêm thông tin để thực hiện điều này cả trong mã và thông qua Windows trong:

Hy vọng rằng cung cấp thêm một số thông tin cho bất cứ ai cố gắng để làm điều này!


Một quy trình làm việc trong câu hỏi riêng biệt: stackoverflow.com/questions/84847/ từ
The_Ghost

4
"Công cụ này được cài đặt tự động với Visual Studio. Để chạy công cụ, hãy sử dụng Dấu nhắc lệnh dành cho nhà phát triển (hoặc Dấu nhắc lệnh của Visual Studio trong Windows 7)." msdn.microsoft.com/en-us/l
Library / 8s9b9yaz (v = vs.110) .aspx

Rất tò mò về chứng chỉ được sử dụng bởi signtool.
Overdrivr

1
Tùy chọn "đăng nhập" không khả dụng sau Windows SDK 7.0
Omar Reis

Makecert đã không được chấp nhận và một lệnh ghép ngắn PowerShell New-SelfSignCertert nên được sử dụng để tạo chứng chỉ kiểm tra thay thế. Chi tiết trong stackoverflow.com/a/51443366/38117911 (trả lời câu hỏi được liên kết bởi The_Ghost).
Alexander Revo

35

Tôi đã có cùng một kịch bản trong công việc của tôi và đây là những phát hiện của chúng tôi

Điều đầu tiên bạn phải làm là lấy chứng chỉ và cài đặt nó trên máy tính của mình, bạn có thể mua một chứng chỉ từ Tổ chức phát hành chứng chỉ hoặc tạo một chứng chỉ bằng makecert .

Dưới đây là những ưu và nhược điểm của 2 lựa chọn

Mua một chứng chỉ

  • Ưu
    • Sử dụng chứng chỉ do CA (Tổ chức phát hành chứng chỉ) cấp sẽ đảm bảo Windows sẽ không cảnh báo người dùng cuối về một ứng dụng từ "nhà xuất bản không xác định" trên bất kỳ Máy tính nào sử dụng chứng chỉ từ CA (OS thường đi kèm với chứng chỉ gốc từ manny CA )
  • Nhược điểm:
    • Có một chi phí liên quan đến việc lấy chứng chỉ từ CA

Tạo chứng chỉ bằng Makecert

  • Ưu điểm:
    • Các bước rất dễ dàng và bạn có thể chia sẻ chứng chỉ với người dùng cuối
  • Nhược điểm:
    • Người dùng cuối sẽ phải tự cài đặt chứng chỉ trên máy của họ và tùy thuộc vào khách hàng của bạn mà có thể không phải là một tùy chọn
    • Chứng chỉ được tạo bằng makecert thường được sử dụng để phát triển và thử nghiệm, không phải sản xuất

Ký tập tin thực thi

Có hai cách ký tệp bạn muốn:

  • Sử dụng chứng chỉ được cài đặt trên máy tính

    ký hiệu signtool.exe / a / s MY / sha1 sha1_thumbprint_value / t http://timestamp.verisign.com/scripts/timstamp.dll / v "C: \ filename.dll"

    • Trong ví dụ này, chúng tôi đang sử dụng chứng chỉ được lưu trên thư mục Cá nhân có dấu vân tay SHA1 (Dấu vân tay này xuất phát từ chứng chỉ) để ký tên vào tệp tại "C: \ filename.dll"
  • Sử dụng tệp chứng chỉ

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

    • Trong ví dụ này, chúng tôi đang sử dụng chứng chỉ "c: \ path \ to \ mycert.pfx" với mật khẩu pfxpassword để ký tệp "c: \ path \ to \ file.exe"

Kiểm tra chữ ký của bạn

Cách 1: Sử dụng signtool

Đi đến: Bắt đầu> Chạy Loại CMD> bấm OK Tại dấu nhắc lệnh, nhập thư mục tồn tại signtool Chạy như sau:

signtool.exe xác minh / pa / v "C: \ filename.dll"

Phương pháp 2: Sử dụng Windows

Bấm chuột phải vào tệp đã ký Chọn Thuộc tính Chọn tab Chữ ký số. Chữ ký sẽ được hiển thị trong phần danh sách Chữ ký.

Tôi hy vọng điều này có thể giúp bạn

Nguồn:


Vui mừng tôi có thể giúp @PhilLab
Erick Castrillo

Xin vui lòng cho $$$ ước tính. Cảm ơn!
InTheNameOfScience

1
@WeGoToMars Tôi nghĩ rằng bài viết này có thể giúp bạn cheapsslsecurity.com/sslproducts/codesigningcertert.html hoặc tại đây digicert.com/code-signing
Erick Castrillo

30

Bạn có thể nhận được chứng chỉ ký mã giá rẻ miễn phí từ Certum nếu bạn đang thực hiện phát triển nguồn mở.

Tôi đã sử dụng chứng chỉ của họ trong hơn một năm và nó đã loại bỏ thông báo nhà xuất bản không xác định từ Windows.

Theo như ký mã, tôi sử dụng signtool.exe từ một tập lệnh như thế này:

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

3
Nó không còn miễn phí nữa, vẫn rẻ hơn nhiều, € 14
hultqvist 24/07/2015

1
Bạn nói đúng, nó không còn miễn phí nữa. fwiw tôi vừa gia hạn, và tôi đã không trả bất cứ điều gì. Có lẽ tôi là ông nội. Có lẽ các quy trình nội bộ của họ bị hỏng. Trang web của họ chắc chắn là phức tạp.
Lee Richardson


Cửa hàng Certum nói rằng chứng chỉ nguồn mở của họ S NOT KHÔNG xóa thông báo Bộ lọc SmartScreen của Microsoft.
Markus Laire

17

Tạp chí ASP của ASP có một mô tả chi tiết về cách ký mã (Bạn phải là thành viên để đọc bài viết). Bạn có thể tải xuống thông qua http: //www.asp-sharnterest.org/

Đây là liên kết đến một mô tả làm thế nào bạn có thể làm chứng chỉ kiểm tra của riêng bạn .

Điều này cũng có thể thú vị.


7
Hợp đồng bổ sung bốn năm sau: Comodo đôi khi bị xâm phạm vào đầu năm 2012 ( blog.comodo.com/it-security/data-security/ mẹo ) và vì vậy rất nhiều đại lý người dùng hiện từ chối chứng chỉ với cơ quan gốc Comodo
A. Wilson

8
Có phải Comodo vẫn là một vụ cá cược rủi ro vào giữa năm 2013 và bởi 'tác nhân người dùng', điều đó có nghĩa là Microsoft / Windows vì chắc chắn họ là những người quyết định có hiển thị thông báo 'nhà xuất bản nổi tiếng' đó hay không.
Dan W

Xin lỗi, đã xóa các đề xuất dịch vụ rõ ràng, 1) đã lỗi thời và 2) đã bị loại khỏi chủ đề ngay bây giờ (vì 1.).
lừa dối


8

Tham khảo https://steward-fu.github.io/website/do/wdm/elf_sign.htmlm Lưu ý: signtool.exe từ Microsoft SDK

1. Thời gian đầu tiên (để làm chứng chỉ riêng)

Makecert -r -pe -ss YourName YourName.cer

certmgr.exe -add YourName.cer -s -r rootMachine root

2.Sau khi (để thêm dấu hiệu của bạn vào ứng dụng của bạn)

ký hiệu signtool / s YourName YourApp.exe


4

Và một tùy chọn khác, nếu bạn đang phát triển trên Windows 10 nhưng chưa cài đặt signtool.exe của Microsoft, bạn có thể sử dụng Bash trên Ubuntu trên Windows để ký ứng dụng của mình. Đây là một chạy xuống:

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


osslsigncodecũng có sẵn bên dưới cygwin, vì vậy nếu bạn đã sử dụng (như tôi), thì bạn có thể đăng nhập vào môi trường hiện tại của mình, thay vì cần phải chuyển sang WSL.
thoni56

4

Sử dụng liên kết sau để ký tệp .exe (thiết lập / cài đặt) (ký tệp exe / setup mà không sử dụng Microsoft setup signtool)

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

lệnh mẫu java -jar jsign-2.0.jar --keystore keystore.jks "- alias bí danh - mật khẩu lưu trữ MyInstaller.exe

Đã làm cho tôi :)


3

Đây không phải là một câu trả lời trực tiếp cho câu hỏi, nhưng nó có liên quan chặt chẽ (và tôi hy vọng hữu ích) vì sớm muộn một lập trình viên sẽ đưa tay vào ví:

Vì vậy, giá cho chữ ký EV:

1 Năm $ 350 + ($ 50 phí ẩn)
2 Năm $ 600
3 Năm $ 750
[www.ksoftware.net] [3]
eToken được gửi dưới dạng thẻ nhớ USB. Không cần người đọc.
Bạn thực sự mua hàng từ Comodo (Sectigo)

1 năm 350 euro
3 năm 799 euro
sklep.certum.pl

1 năm $ 499 USD
3 năm $ 897 USD
sectigo.com

1 năm $ 410 tổng cộng
2 năm $ 760 tổng cộng
3 năm $ 950 tổng số
www.globalsign.com

1 Năm: $ 600 (là $ 104)
3 Năm :?
www.digicert.com

1 năm: 700 đô la
3 năm: đắt tiền vô lý
[ https://trustcenter.websecurity.symantec.com/]

Thêm giá tại đây:
https://cheapsslsecurity.com/sslproducts/codesigningcert ve.html


Đồng thời xem liên kết được thêm bởi Erick Castrillo: cheapsslsecurity.com/sslproducts/codesigningcert ve.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.