Jak digitálně podepisovat aplikace oficiálním certifikátem

30. 12. 2017, Vladimír Klaus, přečteno 129x

Systém
Windows

Po více než 6 měsících používání vlastního certifikátu jsem se rozhodl objednat si pořádný, oficiální. Volba padla na Thawte a jako prostředníka jsem použil SSLmarket, což se osvědčilo i proto, že mají skvělou technickou podporu. Pro podepisování aplikací musíte zvolit Code Signing certifikáty.

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 1

Až dostanete *.pfx, tak nejjednodušší použití je podepisovat pomocí odkazu na soubor a s použitím hesla k certifikátu.

set ToolsRoot="c:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\"
set ST=%ToolsRoot%signtool.exe
%ST% sign /f d:\MujCertifikat.pfx /p "moje-heslo" d:\MojeAplikace.exe

Tím si ověříte, že to vůbec funguje, ale díky uvedení hesla není to bezpečné. Mnohem lepší je certifikát nainstalovat a pak se odkazovat na jeho jméno.

Poklepejte tedy na *.pfx soubor - spustí se průvodce importem. V něm je velmi důležité použít Aktuální uživatel, protože jinak na certifikát neuvidíte a podepisování nebude fungovat!

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 2

V dalším kroku se jen ukáže cesta, odkud se certifikát vezme.

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 3

Nyní zadáte heslo a zároveň nebudete zaškrtávat exportovatelnost klíče!

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 4

Necháte automatický výběr úložiště.

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 5

A proces dokončíte.

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 6

Nyní už můžete vyzkoušet podepisování pomocí odkazu na jméno certifikátu, tedy ne na název souboru, ale jméno osoby či firmy, na kterou je vystaven.

set ToolsRoot="c:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\"
set ST=%ToolsRoot%signtool.exe
%ST% sign /n "Ing. Vladimír Klaus" d:\ImageFromClipboard.exe

Pokud budete podepisování volat z dávkového souboru, narazíte na problém v případě, že jméno obsahuje diakritiku.

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 7

Řešení je naštěstí velmi jednoduché - při zadávání názvu certifikátu lze zadat pouze jeho část.

set ToolsRoot="c:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\"
set ST=%ToolsRoot%signtool.exe
%ST% sign /n "Klaus" d:\ImageFromClipboard.exe

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 8

Samozřejmě můžete i zkusit podepisovat pomocí parametru /a - tím by se měl automaticky vybrat nejvhodnější certifikát pro daný účel, ale zase stoupá riziko, že po instalaci dalších certifikátů se to bude podepisovat jiným.

set ToolsRoot="c:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\"
set ST=%ToolsRoot%signtool.exe
%ST% sign /a d:\ImageFromClipboard.exe

Aby podepsaná aplikace byla "důvěryhodná" i poté, co skončí platnost certifikátu, je nutné přidat časové razítko, které určí, že v době podepisování byl certifikát platný a aplikace bude v pohodě i později. Časové razítko poskytují různé servery, např.

http://timestamp.comodoca.com nebo http://timestamp.verisign.com/scripts/timstamp.dll.

set ToolsRoot="c:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\"
set ST=%ToolsRoot%signtool.exe
%ST% sign /n "Klaus" /t http://timestamp.verisign.com/scripts/timstamp.dll d:\ImageFromClipboard.exe

Ve vlastnostech souboru na kartě Digitální podpisy uvidíte časové razítko.

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 9

I když budete mít aplikaci podepsanou, stejně nemusí projít SmartScreen filtrem. Přesněji řečeno - neukáže se správný vydavatel - a chová se to tedy stejně, jako by aplikace vůbec podepsaná nebyla.

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 10

Důvodem je, že podepisujete pomocí výchozího SHA-1 algoritmu, což už není bezpečné, protože se ho podařilo prolomit. Je tedy třeba podepisovat 2x, ještě za použití algoritmu SHA-256. Specifikace algoritmu se prování pomocí /fd. Tím se mění i použití druhého časového razítka a též nezapomeňte použít /as, aby se druhý podpis přidal k prvnímu, jinak by byl první přepsán.

A jak roste složitost, vyplatí se také použít parametr /v, aby se při podepisování vše detailně vypisovalo.

set ToolsRoot="c:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\"
set ST=%ToolsRoot%signtool.exe
%ST% sign /n "Klaus" /v /t http://timestamp.verisign.com/scripts/timstamp.dll /fd SHA1 d:\ImageFromClipboard.exe
%ST% sign /n "Klaus" /v /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /fd SHA256 /as d:\ImageFromClipboard.exe

Výsledek je pak mnohem zajímavější.

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 11

A také po stažení takto podepsané aplikace z internetu se to už SmartScreen filtru líbí mnohem více.

Jak digitálně podepisovat aplikace oficiálním certifikátem, č. 12

A pokud získáte dostatečnou reputaci, tak se filtr už ani nebude zobrazovat a aplikace rovnou spustí. To ale bude záviset také na vašem aktuálním nastavení UAC, verzi Windows a zda spouštíte běžnou aplikaci nebo instalaci zasahující do systému. A navíc se vše neustále mění a vyvíjí...

Samozřejmě nesmíte o reputaci přijít tím, že budete šířit aplikace, které budou lidé nahlašovat jako škodlivé. Pokud nechcete čekat na dostatečnou reputaci, můžete si pořídit "EV (Extended Validation) certifikát". Ten je ovšem drahý - cca 17 000 Kč na 1 rok. Běžný certifikát stojí okolo 6 000 Kč na 1 rok.

Zdroje: