Podpisywanie pliku Windows EXE


180

Mam plik EXE , który chciałbym podpisać, aby system Windows nie ostrzegał użytkownika końcowego o aplikacji od „nieznanego wydawcy”. Nie jestem programistą Windows. Omawiana aplikacja to wygaszacz ekranu generowany z aplikacji, która generuje aplikacje wygaszacza ekranu. W związku z tym nie mam wpływu na sposób generowania pliku.

Dowiedziałem się już, że będę potrzebować certyfikatu do podpisywania kodu z CA takiego jak Verisign lub instantssl.com. Nie rozumiem, co muszę zrobić (jeśli to w ogóle możliwe), aby podpisać plik EXE. Jakie jest proste wyjaśnienie?

Odpowiedź Mela Greena poszła dalej, ale signtool chce, abym sprecyzował, jakiego certyfikatu użyć w każdym przypadku. Czy mogę w jakiś sposób uzyskać bezpłatny certyfikat do podpisywania kodu, aby sprawdzić, czy to w ogóle zadziała?

Proszę również określić, który rodzaj certyfikatu jest prawidłowy. Większość witryn wspomina tylko o „podpisywaniu kodu” i mówi o podpisywaniu aplikacji, które są faktycznie kompilowane przez użytkownika. Nie dotyczy to mnie.


3
Ciekawe - ile trzeba zapłacić, żeby kupić certyfikat?
InTheNameOfScience

2
@Rigel około 400 $ rocznie, prawdopodobnie nie warto :)
Sharan Arumugam

@SharanArumugam: CO ?????? To tak, jakby Microsfot był przeciwko tanim / darmowemu oprogramowaniu!
InTheNameOfScience

Odpowiedzi:


116

Możesz spróbować użyć narzędzia Microsoft Sign Tool

Można go pobrać jako część zestawu Windows SDK dla systemu Windows Server 2008 i .NET 3.5. Po pobraniu możesz go używać z wiersza poleceń w następujący sposób:

signtool sign / a MyFile.exe

Powoduje to podpisanie pojedynczego pliku wykonywalnego przy użyciu „najlepszego dostępnego certyfikatu”. (Jeśli nie masz certyfikatu, wyświetli się komunikat o błędzie SignTool).

Lub możesz spróbować:

signtool signwizard

Spowoduje to uruchomienie kreatora, który przeprowadzi Cię przez proces podpisywania aplikacji. (Ta opcja nie jest dostępna po zestawach Windows SDK 7.0).


Jeśli chcesz uzyskać certyfikat, którego możesz użyć do przetestowania procesu podpisywania pliku wykonywalnego, możesz skorzystać z narzędzia .NET Makecert .

Narzędzie do tworzenia certyfikatów (Makecert.exe)

Po utworzeniu własnego certyfikatu i użyciu go do podpisania pliku wykonywalnego, musisz ręcznie dodać go jako zaufany główny urząd certyfikacji dla swojej maszyny, aby UAC poinformował użytkownika, który go uruchamia, że ​​pochodzi z zaufanego źródła. Ważne . Zainstalowanie certyfikatu jako ROOT CA zagrozi prywatności użytkowników. Zobacz, co się stało z firmą DELL. Więcej informacji o tym, jak to osiągnąć, zarówno w kodzie, jak i za pośrednictwem systemu Windows, można znaleźć w:

Mamy nadzieję, że dostarczy to więcej informacji każdemu, kto spróbuje to zrobić!


Działający przepływ pracy w osobnym pytaniu: stackoverflow.com/questions/84847/ ...
The_Ghost

4
„To narzędzie jest automatycznie instalowane z programem Visual Studio. Aby uruchomić narzędzie, użyj wiersza polecenia dewelopera (lub wiersza polecenia programu Visual Studio w systemie Windows 7)”. msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
Westy92

Jestem również bardzo ciekawy certyfikatu używanego przez signtool.
Overdrivr

1
Opcja „signwizard” nie jest dostępna po pakiecie Windows SDK 7.0
Omar Reis,

Makecert został przestarzały i zamiast tego do utworzenia certyfikatu testowego należy użyć polecenia cmdlet programu PowerShell New-SelfSignedCertificate. Szczegóły na stackoverflow.com/a/51443366/38117911 (odpowiedź na pytanie, do którego prowadzi The_Ghost).
Alexander Revo

35

Miałem ten sam scenariusz w mojej pracy i oto nasze ustalenia

Pierwszą rzeczą, którą musisz zrobić, to zdobyć certyfikat i zainstalować go na swoim komputerze, możesz kupić go w urzędzie certyfikacji lub wygenerować za pomocą makecert .

Oto zalety i wady dwóch opcji

Kup certyfikat

  • Plusy
    • Użycie certyfikatu wydanego przez CA (urząd certyfikacji) zapewni, że system Windows nie ostrzeże użytkownika końcowego o aplikacji od „nieznanego wydawcy” na żadnym komputerze korzystającym z certyfikatu wydanego przez CA (system operacyjny jest zwykle dostarczany z certyfikatami głównymi z wielu CA )
  • Cons:
    • Uzyskanie certyfikatu z urzędu certyfikacji wiąże się z kosztami

Wygeneruj certyfikat za pomocą Makecert

  • Plusy:
    • Kroki są proste i możesz udostępnić certyfikat użytkownikom końcowym
  • Cons:
    • Użytkownicy końcowi będą musieli ręcznie zainstalować certyfikat na swoich komputerach oraz w zależności od klientów, co może nie być opcją
    • Certyfikaty generowane za pomocą makecert są zwykle używane do projektowania i testowania, a nie do produkcji

Podpisz plik wykonywalny

Istnieją dwa sposoby podpisania pliku, który chcesz:

  • Korzystanie z certyfikatu zainstalowanego na komputerze

    signtool.exe sign / a / s MY / sha1 sha1_thumbprint_value / t http://timestamp.verisign.com/scripts/timstamp.dll / v "C: \ filename.dll"

    • W tym przykładzie używamy certyfikatu przechowywanego w folderze osobistym z odciskiem palca SHA1 (ten odcisk palca pochodzi z certyfikatu) do podpisania pliku znajdującego się w „C: \ filename.dll”
  • Korzystanie z pliku certyfikatu

    signtool sign / tr http://timestamp.digicert.com / td sha256 / fd sha256 / f "c: \ ścieżka \ do \ mycert.pfx" / p pfxpassword "c: \ ścieżka \ do \ file.exe"

    • W tym przykładzie używamy certyfikatu „c: \ path \ to \ mycert.pfx” ​​z hasłem pfxpassword do podpisania pliku „c: \ path \ to \ file.exe”

Przetestuj swój podpis

Metoda 1: użycie signtool

Idź do: Start> Uruchom Wpisz CMD> kliknij OK W wierszu polecenia wprowadź katalog, w którym istnieje signtool Uruchom następujące polecenie:

signtool.exe weryfikacja / pa / v „C: \ filename.dll”

Metoda 2: Korzystanie z systemu Windows

Kliknij podpisany plik prawym przyciskiem myszy Wybierz Właściwości Wybierz kartę Podpisy cyfrowe. Podpis zostanie wyświetlony w sekcji Lista podpisów.

Mam nadzieję, że to ci pomoże

Źródła:


Cieszę się, że mogę pomóc @PhilLab
Erick Castrillo

Proszę również podać kosztorys. Dzięki!
InTheNameOfScience

1
@WeGoToMars Myślę, że ten artykuł może ci pomóc cheapsslsecurity.com/sslproducts/codesigningcertificate.html lub tutaj digicert.com/code-signing
Erick Castrillo

31

Możesz otrzymać bezpłatny, tani certyfikat do podpisywania kodu od Certum, jeśli tworzysz oprogramowanie typu open source.

Używam ich certyfikatu od ponad roku i pozwala pozbyć się nieznanej wiadomości wydawcy z systemu Windows.

Do podpisywania kodu używam signtool.exe ze skryptu takiego:

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

3
To już nie wygląda na darmowe, wciąż znacznie tańsze, 14 €
hultqvist

1
Masz rację, to już nie wygląda na wolne. fwiw Właśnie odnowiłem i nic nie zapłaciłem. Może jestem dziadkiem. Może ich wewnętrzne procesy są zepsute. Ich strona internetowa jest z pewnością skomplikowana.
Lee Richardson,


Certum twierdzi, że ich certyfikat open source NIE spowoduje usunięcia wiadomości Microsoft SmartScreen Filter.
Markus Laire

17

Magazyn ASP ASPects zawiera szczegółowy opis sposobu podpisywania kodu (aby przeczytać artykuł, musisz być członkiem). Możesz go pobrać ze strony http://www.asp-shareware.org/

Oto link do opisu, w jaki sposób możesz stworzyć własny certyfikat testowy .

To też może być interesujące.


7
Dodatek cztery lata później: Comodo zostało naruszone gdzieś na początku 2012 roku ( blogs.comodo.com/it-security/data-security/… ), a więc wielu użytkowników odrzuca teraz certyfikaty z uprawnieniami administratora Comodo
A. Wilson

8
Czy Comodo nadal jest ryzykownym zakładem w połowie 2013 r., A przez „agentów użytkownika” oznacza to, że Microsoft / Windows z pewnością to oni decydują, czy pokazać ten osławiony komunikat „nieznanego wydawcy”.
Dan W

Przepraszamy, usunęliśmy jawne zalecenia dotyczące usług, które 1) są nieaktualne i 2) zostały teraz wykluczone z tematu (ponieważ 1.).
deceze



4

I jeszcze jedna opcja, jeśli tworzysz w systemie Windows 10, ale nie masz zainstalowanego signtool.exe firmy Microsoft, możesz użyć Bash w systemie Ubuntu w systemie Windows, aby podpisać swoją aplikację. Oto wyczerpanie:

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


osslsigncodejest również dostępny pod cygwin, więc jeśli już go używasz (tak jak ja), możesz zalogować się w swoim obecnym środowisku, zamiast przełączać się na WSL.
thoni56

4

Użyj poniższego linku, aby podpisać plik .exe (Instalator / Instalator) (Podpisz plik exe / Instalatora bez użycia narzędzia instalacyjnego Microsoft)

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

przykładowe polecenie java -jar jsign-2.0.jar --keystore keystore.jks "--alias alias --storepass hasło MyInstaller.exe

Pracował dla mnie :)


3

Nie jest to bezpośrednia odpowiedź na to pytanie, ale jest ściśle powiązane (i mam nadzieję, że przydatne), ponieważ prędzej czy później programista włoży rękę do portfela:

Ceny za podpis EV:

1 rok 350 USD + (ukryta opłata 50 USD)
2 lata 600 USD
3 lata 750 USD
[www.ksoftware.net] [3]
eToken wysyłany jako pamięć USB. Nie potrzeba żadnego czytnika.
Rzeczywiście kupujesz od Comodo (Sectigo)

1 rok 350 euro
3 rok 799 euro
sklep.certum.pl

1 rok 499 USD
3 lata 897 USD
sectigo.com

1 rok 410 $ łącznie
2 lata 760 $ łącznie
3 lata 950 $ łącznie
www.globalsign.com

1 rok: 600 $ (było 104 $)
3 rok:?
www.digicert.com

1 rok: 700 USD
3 lata: absurdalnie drogie
[ https://trustcenter.websecurity.symantec.com/]

Więcej cen tutaj:
https://cheapsslsecurity.com/sslproducts/codesigningcertificate.html


Zobacz także link dodany przez Ericka Castrillo: cheapsslsecurity.com/sslproducts/codesigningcertificate.html

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.