05.03.2017, Vladimír Klaus, navštíveno 4684x

Systém
Windows

Pokud se chcete začít zabývat podepisováním aplikací, pak je ideální začít tím, že si vytvoříte vlastní certifikát. Komerční jsou relativně drahé a stejně je dobré se do problematiky nějak ponořit, než "vyhodíte" 5 000,-, případně i více.

Jak digitálně podepisovat aplikace vlastním certifikátem, obr. 1

Asi nejlepší začátek (v češtině) je skvělý návod od Pepáka. Provede vás celým procesem, vše je hodně komentované a mě to velmi pomohlo. Má to jen dva háčky, což chápu s ohledem na to, že jde o článek z roku 2010:

  • pokud vynecháte "složitější" postup, tak vám to nebude fungovat
  • pokud následně nezajistíte důvěryhodnost kořenového certifikátu, tak vám to nebude fungovat

Pokud tedy budete postupovat tou jednodušší cestou (popsanou i na jiných webech), dojdete do stavu, kdy podepsání skončí hláškou: "The signer’s certificate is not valid for signing", což je opravdu frustrující, protože nevíte proč není validní. To se v těch článcích nepíše, ale je také možné, že to je výsledek až novějších Windows, resp. přísnějších pravidel.

Jak digitálně podepisovat aplikace vlastním certifikátem, obr. 2

Pěkně se o tom píše v tomto článku. A to mě navedlo k tomu, že z Pepákova článku nelze vynechat tu složitější část, kde se certifikát vytvoří s délkou klíče 2048 bitů. Vše bude ukázáno níže v dávkových souborech.

Malá vsuvka: Další z oblíbených hlášek při podepisování je "The signing certificate is not valid for the requested usage.". To se stane v situaci, kdy máte dobře vytvořený a nainstalovaný certifikát, jen se nedá použít - klasickým příkladem je certifikát pro podepisování dokumentů/mailů/DPH třeba od PostSignum. A kdy a proč se použije tento certifikát? No třeba v případě, že zavoláte podepisovací aplikaci s parametrem /a, což znamená vybrat ten nejlepší certifikát, co máte. A když třeba ani jiný nemáte...

Ale zpět k podepisování. Pokud tedy zvládnete vytvořit konečně korektní certifikát, pak se objeví problém číslo 2. Aplikaci podepíšete, ale kontrola neprojde - "A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider".

Jak digitálně podepisovat aplikace vlastním certifikátem, obr. 3

K řešení mi pomohl tento článek. Je třeba spustit Microsoft Management Console, což je zde "C:\Windows\System32\mmc.exe". Tam vyberete "Přidat nebo odebrat modul snap-in".

Jak digitálně podepisovat aplikace vlastním certifikátem, obr. 4

Objeví se dialog (pěkně zprasený), ve kterém vyberte Certifikáty a Přidat.

Jak digitálně podepisovat aplikace vlastním certifikátem, obr. 5

Dále pak zvolte "Účet počítače" a "Místní počítač". Po potvrzení dialogu rozbalte v levém seznamu Důvěryhodné kořenové certifikační autority a přes kontextové menu u certifikátů zvolte Všechny úkoly > Importovat... A nalistujte váš root-certifikát.cer.

Jak digitálně podepisovat aplikace vlastním certifikátem, obr. 6

Pokud vše proběhne úspěšně, najdete svůj kořenový certifikát zde:

Jak digitálně podepisovat aplikace vlastním certifikátem, obr. 7

Když toto vše absolvujete a spustíte znovu dávku na podepsání, vše včetně kontroly proběhne úspěšně.

Jak digitálně podepisovat aplikace vlastním certifikátem, obr. 8

Ukázka dávkových souborů

Vytvoření certifikátu provedete pomocí této dávky. Důležité je správně nastavit cestu k nástrojům (ToolsRoot), která se může lišit podle toho, co všechno máte nebo nemáte nainstalováno. Pokud tyto aplikace nikde nenajdete, pak si zřejmě budete muset nainstalovat Microsoft Windows SDK.

@echo off
rem hlavní složka s nástroji
set ToolsRoot="c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Microsoft Azure Data Lake Tools for Visual Studio 2015\2.1.0000.0\CppSDK\SDK\bin\"
rem nástroje
set MC=%ToolsRoot%makecert.exe
set CS=%ToolsRoot%cert2spc.exe
set PP=%ToolsRoot%pvk2pfx.exe

rem Odstraním dříve vytvořené soubory týkající se certifikátu
del vkCert.*

rem Připravím certifikát a další soubory
%MC% -r -len 4096 -sv vkCert-root.pvk -n "CN=Vlada Klaus (root CA);E=http://www.vladimirklaus.cz" vkCert-root.cer
%MC% -ic vkCert-root.cer -iv vkCert-root.pvk -len 2048 -m 12 -sv vkCert.pvk -n "CN=Vlada Klaus;E=http://www.vladimirklaus.cz" vkCert.cer
%CS% vkCert.cer vkCert.spc
%PP% -pvk vkCert.pvk -spc vkCert.spc -pfx vkCert.pfx

pause

Vlastní podepsání aplikace pak může proběhnout třeba takto:

@echo off
rem hlavní složka s nástroji
set ToolsRoot="c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Microsoft Azure Data Lake Tools for Visual Studio 2015\2.1.0000.0\CppSDK\SDK\bin\"
rem nástroje
set ST=%ToolsRoot%signtool.exe
set App="d:\Projekty\AUDREYsoftware\GlyphManager2017\Pas\GlyphManager.exe"

echo ---Podepisovani---
%ST% sign /f vkCert.pfx /v %App%
echo.

echo ---Kontrola---
%ST% verify /pa /v %App%
echo.

pause

Stále ale musíte mít na paměti, že jste si certifikát vystavili sami, takže nejde o žádný důvěryhodný podpis. Ovšem pořád lepší, než když aplikace podepsána není vůbec. Navíc principy zde popsané jsou obecné a platné stále, takže poté, co si pořídíte opravdový důvěryhodný certifikát, bude pro vás jeho použití hračkou.

Jak digitálně podepisovat aplikace vlastním certifikátem, obr. 9

Celá problematika, jednotlivé nástroje, informace okolo bezpečnosti či prolomení SHA1 certifikátů je mnohem širší, proto doporučuji vše nastudovat do větší hloubky. Ale snad tento článek poslouží alespoň jako startovní bod.

Zdroje: