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 v 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.

Získání PFX souboru

Pro podpis aplikací potřebujete již zmíněný PFX soubor, nebo certifikát v úložišti certifikátů Windows. I pro import certifikátu do úložiště je možné použít formát PFX (při importu doporučujeme neumožnit export privátního klíče). Pokud byste používali certifikát uložený v úložišti certifikátů systému, doporučujeme si uložit i jeho zálohu právě v PFX formátu.

Určitě se ptáte, jak PFX soubor vytvořit. Možností je více.

    1. Můžete využít IIS, které je součástí Windows, a můžete si v IIS vytvořit žádost o certifikát a po jeho vystavení žádost dokončit a certifikát exportovat do PFX.
    2. Druhou možností je vytvoření klíčů a následně vytvoření PFX souboru v OpenSSL OpenSSL je součástí všech linuxových distribucí, ale je možné program použít i na Windows v podobě GnuWin nebo Win32OpenSSL, což jsou pro Windows zkompilované OpenSSL. To provedete následujícími příkazy:
      openssl genrsa -out privatni-klic.key 2048
      openssl req -new -key privatni-klic.key -out nazev.csr

      CSR vložíte do objednávky certifikátu. Po jeho vystavení si ho uložte a z privátního klíče, certifikátu a certifikátu CA vytvořte PFX soubor.

      Před vytvořením PFX je potřeba převést soubor P7B s certifikáty CA do textového formátu. Certifikáty CA musí v PFX souboru být, jinak nebude podpis důvěryhodný!

      openssl pkcs7 -print_certs -in windows_intermediate.p7b -out CAcert.cer

      Potom v OpenSSL vše sloučíte do PFX souboru.

      openssl pkcs12 -export -in cert.crt -certfile CAcert.cer -inkey key.pem -out výstup.pfx
    3. Třetí – uživatelsky nejpříjemnější možností – je použití grafického programu XCA. V něm si vytvoříte žádost o certifikát, privátní klíč, po vystavení certifikát naimportujete a provedete export všech klíčů do souboru PFX.

Pokud si na vytvoření PFX netroufnete nebo se nedaří, můžete požádat podporu SSLmarketu, která vám pro objednaný certifikát PFX soubor vytvoří.

Použití Signtool

Signtool.exe je program, který podepisuje aplikace s použitím  PFX s 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 uložený v souboru v daném počítači (nikam se neinstaluje).

Ukázka podepisování se signtool.exe
Ukázka podepisování se signtool.exe

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í
  • /fd – specifikuje hash algoritmus podpisu. Výchozí je SHA-1, který však nebude důvěryhodný, proto je potřeba použít SHA256 , tedy /fd SHA256.
  • /p Password – zadání hesla, pokud podepisujete s PFX.
  • /s StoreName – používáte-li úložiště certifikátů, 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.

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 /f MyCert.pfx /t http://timestamp.verisign.com/scripts/timstamp.dll C:\prace\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 servery Symantecu:

  • http://timestamp.verisign.com/scripts/timstamp.dll
  • https://timestamp.geotrust.com/tsa

Tyto servery nemají většinou žádný web na portu 80, takže je zbytečné 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. Nejčastějším způsobem použití je uložení PFX certifikátu jako souboru do počítače a následné odkazování na tento soubor. Tento princip je praktický, avšak není vůbec bezpeč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. Příklad podpisu s PFX souborem je uveden výše.

Druhým způsobem je uložení certifikátu v úložišti systém a následné volání podle subjektu v certifikátu. Tato metoda je o něco bezpečnější za předpokladu, že zakážete export privátního klíče certifikátu. Bez privátního klíče je certifikát k ničemu a exportovat ho ze systému není možné. Podpis s použitím úložiště pak vyžaduje parametr /n:

signtool sign /n "My Company Certificate" /t http://timestamp.verisign.com/scripts/timstamp.dll C:\prace\test.exe

Třetím a nejbezpečnějším způsobem je uložení certifikátů na tokenu nebo bezpečném úložišti. Token využívají EV certifikáty Code Signing, které výrazně doporučujeme. Majitel certifikátu ho má v bezpečí, z tokenu není možné certifikát exportovat a při několikerém zadání špatného hesla se certifikát z tokenu smaže. Code Signing EV certifikát má kromě zmíněné bezpečnosti použití i zásadní výhodu z pohledu důvěryhodnosti; více se o tom dočtete v samostatném článku. Podpis s certifikátem uloženým na tokenu vyžaduje parametr /s my:

signtool sign /s my /t http://timestamp.verisign.com/scripts/timstamp.dll C:\prace\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:\prace\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.

Detail podpisu aplikace v průzkumníkovi windows
Jak podepisovat aplikace na Windows (SDK)
Tagy: