Jak podepisovat aplikace na Windows (SDK)
Pojďme se společně podívat na podpis aplikace na Windows pomocí Windows SDK (nástroje signtool) a Code Signing certifikátu. Návod předpokládá připravený Code Signing certifikát v PFX a nainstalované vývojové prostředí Windows SDK na operačním systému Windows. SDK si stáhněte z webu Microsoftu pro příslušnou verzi vašich Windows, například Windows Software Development Kit (SDK) for Windows 10.
Použití Signtool
Signtool.exe je program, který podepisuje aplikace Code Signing certifikátem. Po nainstalování Windows SDK ho použijte přes příkazovou řádku. Pro podepisování aplikací musíte znát základní parametry, abyste mohli správně zavolat podepsání aplikace se správným certifikátem a nastavením.
Podepisování skutečně probíhá přes příkazovou řádku a certifikát stačí mít k dispozici na daném počítači (nikam se neinstaluje).
Základní parametry (příkazy) pro podpis jsou tyto:
signtool příkaz /parametr
Z příkazů využijete Sign pro podpis a Verify pro ověření podpisu souboru. Timestamp je příkaz pro vložení časového razítka, ale to můžete udělat rovnou při podepisování souboru.
Užitečné parametry:
- /f SignCertFile – používáte-li pro podpis PFX soubor, tento příkaz odkazuje na jeho umístění. Získat Code Signing certifikát v PFX již není možné.
- /s StoreName – používáte-li úložiště certifikátů (například na tokenu), upřesní, které se má použít. Výchozí je My.
- /t URL – přidá časové razítko a odkaz na něj. URL timestamp serverů najdete níže.
- /td - algoritmus otisku (digest) v časovém razítku. Zvolte minimálně parametr sha256 či vyšší.
- /fd - algoritmus otisku (digest). Zvolte minimálně parametr sha256 či vyšší.
Kompletní dokumentaci najdete na webu Microsoftu nebo po zadání příkazu „signtool sign /?“.
Celý příkaz podepsání souboru potom může vypadat například takto:
SignTool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
Vždy používejte timestamp, neboli časové razítko. Zajistí podepsané aplikaci důvěryhodnost i po expiraci certifikátu, který byl pro podpis použit. To je velice důležité, protože nebudete muset znovu zpětně podepisovat starší aplikace (typicky po dvou letech expirace Code Signing certifikátu), aby nebyly nedůvěryhodné. Pokud v okamžiku podpisu použijete timestamp a certifikát bude platný, bude i aplikace v budoucnosti platná.
Serverů poskytujících časová razítka je více; doporučuji používat timestamp server DigiCertu: http://timestamp.digicert.com/
Tento server nemá žádný web na portu 80, takže je zbytečné jej navštěvovat prohlížečem (nic neuvidíte).
Úložiště certifikátů
Certifikát může být uložen na více místech (ve více úložištích) a můžete si ho „zavolat“ více způsoby. Dříve bylo možné uložit certifikát jako soubor PFX, ale to již není možné. PFX soubor vám může kdokoliv ukrást a byť je PFX chráněné heslem, jedná se o velké bezpečnostní riziko (hesla navíc často bývají velice slabá). PFX se hodí zejména na zálohy certifikátu S/MIME či pro web.
Běžným způsobem uložení certifikátu Code signing je uložení na token a následné volání podle subjektu v certifikátu. Tato metoda je bezpečná a prakticky stejná jako dřívější podepisování s PFX. Bez privátního klíče, který nejde z tokenu exportovat, je certifikát k ničemu a jeho zneužití tak není možné; při pětkrát špatně zadaném hesle se token zablokuje.
Podpis s použitím úložiště pak vyžaduje parametr /n SubjectName:
signtool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
Nebo můžete zvolit výchozí úložiště My a podepisující SW certifikát automaticky najde sám:
signtool sign /s My /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
Kontrola podpisu
Nyní už umíte podepisovat a vaši aplikaci jste opatřili prvním důvěryhodným podpisem. Určitě vás teď zajímá, jak podpis zkontrolovat.
Kontrola je možná jednak pomocí nástroje signtool:
signtool verify C:\test.exe
Jednodušeji lze kontrolu provést zobrazením vlastností souboru v průzkumníkovi Windows. Detail podpisu můžete „rozpitvat“ až na samotný detail použitého certifikátu.
Mrzí nás, že jste zde nenašli potřebné.
Pomůžete nám článek vylepšit? Napiště nám, co jste zde očekávali a nedozvěděli se.