30.12.2017, Vladimír Klaus, navštíveno 5802x
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.
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 to není 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!
V dalším kroku se jen ukáže cesta, odkud se certifikát vezme.
Nyní zadáte heslo a zároveň nebudete zaškrtávat exportovatelnost klíče!
Necháte automatický výběr úložiště.
A proces dokončíte.
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.
Ř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
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, viz níže.
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.
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.
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ší.
Je ovšem také možné, že ať už použitím parametru /n "jméno" nebo parametru /a, dojde k výběru nesprávného certifikátu. Podpis samozřejmě projde, ale je pro daný účel neplatný.
Pak zbývá poslední možnost a tou je místo toho použít parametr /sha1 "xxxxxxxxxxxxx", kam napíšete "SHA1 hash" daného certifikátu. A tento parametr použijete i pro podepisování SHA256. Hash získáte při používání dávkových souborů (viz výše) nebo si přímo spustíte Manažera pro certifikáty (certmgr), tam zvolíte Osobní > Certifikáty a v pravém okně poklepete na příslušný certifikát. V dialogu se pak přepnete na Podrobnosti a úplně dole je Kryptografický otisk.
set ToolsRoot="c:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\"
set ST=%ToolsRoot%signtool.exe
%ST% sign /sha1 "5D071C9490Dxxxxxxxxxxxxxxx" /v /t http://timestamp.verisign.com/scripts/timstamp.dll /fd SHA1 d:\ImageFromClipboard.exe
%ST% sign /sha1 "5D071C9490Dxxxxxxxxxxxxxxx" /v /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /fd SHA256 /as d:\ImageFromClipboard.exe
Po stažení takto podepsané aplikace z internetu se to už SmartScreen filtru líbí mnohem více.
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:
- https://www.podpis-aplikaci.cz/jak-podepisovat-aplikace-na-windows-sdk/
- https://knowledge.symantec.com/support/code-signing-support/index?page=content&id=INFO2274
- https://msdn.microsoft.com/en-us/library/windows/desktop/jj835835%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
- https://stackoverflow.com/questions/34979463/windows-10-ignores-authenticode-on-my-setups-files
- https://social.technet.microsoft.com/Forums/en-US/440e6b32-1f94-46b0-8185-6f41717b966b/why-windows-defender-smartscreen-does-not-show-publisher-name-of-a-signed-executable-?forum=win10itprosecurity
- https://www.digicert.com/blog/ms-smartscreen-application-reputation/
- https://docs.microsoft.com/en-us/dotnet/framework/tools/signtool-exe
- https://www.sslmarket.cz/ssl/help-code-signing-centrum/