Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
CLI nástroj winapp usnadňuje místní vývoj pro Windows: dokáže vygenerovat podpisový certifikát, označit jej na vašem počítači jako důvěryhodný a automaticky zapnout režim pro vývojáře. Každý z těchto kroků změní stav počítače nebo vytvoří soubor s privátním klíčem, takže pomůže přesně zjistit, co dělají.
Tato stránka vysvětluje důsledky každého příkazu, jak ho vrátit zpět a co dělat jinak při odeslání. Vývojové certifikáty a vývojářský režim jsou normální a podporovaná cesta pro místní testování – cílem je pochopit, k čemu se přihlašujete, ne že se jim vyhnete.
Vývojové certifikáty
Balíčky MSIX musí být podepsané před Windows je nainstalují. Pro místní testování winapp cert generate vytvoří certifikát podepsaný sebou samým, takže můžete podepsat a nainstalovat vlastní balíček, aniž byste museli cokoli kupovat.
Co winapp cert generate vytvoří
Vygenerovaný certifikát je certifikát koncové entity pro podepisování kódu s vlastním podpisem:
| Property | Hodnota |
|---|---|
| Key | 2048bitová verze RSA označená jako exportovatelná |
| Algoritmus podpisu | SHA-256 s RSA (PKCS#1 v1.5) |
| Použití klíče | Digitální podpis |
| Rozšířené použití klíče | Podepisování kódu (1.3.6.1.5.5.7.3.3) |
| Základní omezení | Nejedná se o certifikační autoritu |
| Platnost | Ve výchozím nastavení je to 365 dnů (--valid-days) |
| Předmět | Musí odpovídat Publisher ve vašem manifestu |
Příkaz zapíše dvě věci:
-
devcert.pfxv aktuálním adresáři (nebo v cestě, kterou předáte parametru--output). Tento soubor obsahuje certifikát i jeho privátní klíč. - Kopie certifikátu v osobním úložišti certifikátů (
Cert:\CurrentUser\My).
S --export-cer také zapíše soubor .cer vedle .pfx. Tento soubor obsahuje jenom veřejný certifikát – žádný soukromý klíč – takže je to správné předat týmu nebo testovacímu počítači, který potřebuje důvěřovat vašim buildům.
Note
Certifikátu s vlastním podpisem nikdo nedůvěřuje, dokud mu někdo výslovně nezačne důvěřovat. To je v pořádku pro váš vlastní počítač a vaše vlastní testovací počítače; při distribuci aplikace to ale nenahrazuje skutečnou identitu pro podepisování kódu.
Výchozí heslo
winapp cert generate používá password jako heslo k souboru PFX, pokud nezadáte --password. Stejné výchozí nastavení platí i tehdy, když tento certifikát později předáte nástroji winapp sign, jehož volba hesla je také --password, a nástroji winapp pack, který používá --cert-password.
Dobře známé heslo znamená, že privátní klíč devcert.pfx je efektivně nechráněný – každý, kdo soubor získá, může s ním podepsat kód. To je přijatelný kompromis u dočasného certifikátu, který se používá pouze k podepisování místních testovacích sestavení na vašem vlastním počítači, a proto existuje toto výchozí nastavení.
Important
Zacházejte s výchozím heslem jako se signálem, že certifikát je uvolnitelný. Pokud se certifikát někdy používá k podepsání něčeho, co nainstaluje jiná osoba, neměl by to být winapp cert generate certifikát s výchozím heslem – viz Podepisování pro produkční prostředí.
Skripty a agenti nemusí porovnávat samotné heslo: winapp cert generate --json hlásí "defaultPasswordIsPublic": true a opakuje zveřejnění v warnings poli pokaždé, když je výchozí hodnota platná. Viz cert generate JSON output.
Kde se nachází soubor certifikátu
devcert.pfx je privátní klíč na disku. Dvě pravidla ho chrání před problémy:
Necommitujte ho.winapp cert generate automaticky přidá název souboru certifikátu k .gitignore vedle něj, takže výchozí postup je už tímto pokrytý. Pokud soubor přesunete, přejmenujete ho nebo vygenerujete do adresáře spravovaného jiným .gitignoreadresářem, zkontrolujte, jestli položka následovala:
git check-ignore -v devcert.pfx
Pokud se nic nevypíše, soubor není ignorován — přidejte ho, než provedete commit.
Nebalte ho.winapp pack zabalí vše ve vstupním adresáři, takže se devcert.pfx nacházející se ve výstupní složce vaší aplikace dostane do distribuovaného balíčku MSIX. Vygenerujte certifikát mimo složku, kterou zabalíte, jak ukazuje průvodce balením EXE/CLI , a před distribucí ověřte, že chybí:
# Unpack the package and check that no certificate is inside
winapp tool makeappx unpack /p .\MyApp.msix /d .\inspect /o
Get-ChildItem .\inspect -Recurse -Include *.pfx, *.cer
Tip
Pokud se někdy do commitu uloží nebo zveřejní .pfx se skutečným soukromým klíčem, obměňte jej: vygenerujte nový certifikát, znovu jej podepište a podle kroků v části Odebrání důvěryhodného certifikátu přestaňte důvěřovat starému. Odstranění souboru z pozdějšího commitu ho neodstraní z historie.
Co winapp cert install uděluje
winapp cert install přidá certifikát do LocalMachine\TrustedPeople úložiště. To vyžaduje oprávnění správce, protože mění důvěryhodnost každého uživatele na počítači.
Jakmile je certifikát v TrustedPeoplesouboru , Windows přijme všechny balíčky MSIX podepsané tímto certifikátem jako důvěryhodné pro instalaci – nejen balíček, který jste testovali. U certifikátu, u něhož vlastníte soukromý klíč a uchováváte ho lokálně, je to přesně zamýšlený výsledek. Je to také důvod, proč o tom uvažovat:
- Důvěřovat certifikátům, které jste vygenerovali sami nebo které pocházejí od někoho, koho byste nechali nainstalovat software na počítač.
- Neinstalujte vývojový certifikát na sdílené, produkční ani sestavovací počítače, na které spoléhají ostatní lidé.
- Raději sdílejte
.cer(pouze veřejný klíč) spíše než.pfx, když kolega potřebuje nainstalovat váš testovací balíček. Získají schopnost důvěřovat vašim buildům, aniž by získali možnost podepsat se jako vy.
Chcete-li na jiném testovacím počítači důvěřovat .cer, spusťte na něm přímo winapp cert install — příkaz přijímá buď .pfx, nebo pouze veřejný .cer:
# Run as Administrator
winapp cert install .\devcert.cer
Ekvivalentem použití pouze integrovaných nástrojů Windows je:
# Run as Administrator
Import-Certificate -FilePath .\devcert.cer -CertStoreLocation Cert:\LocalMachine\TrustedPeople
Odebrání důvěryhodného certifikátu
Vývojovým certifikátům standardně po jednom roce vyprší platnost, ale vypršení platnosti neznamená jejich odstranění. Jakmile už certifikát nepotřebujete — projekt skončil, zařízení se bude používat k jinému účelu nebo mohlo dojít k úniku klíče — výslovně jej odstraňte.
Nejprve vyhledejte jeho kryptografický otisk:
Get-ChildItem Cert:\LocalMachine\TrustedPeople |
Where-Object { $_.Subject -like '*CN=Contoso*' } |
Format-List Subject, Thumbprint, NotAfter
Poté jej odeberte z úložiště důvěryhodných certifikátů počítače. Tento krok vyžaduje zvýšení oprávnění:
# Run as Administrator. Replace with the thumbprint from the previous command.
$thumbprint = 'ABCD...'
Remove-Item -Path "Cert:\LocalMachine\TrustedPeople\$thumbprint"
cert generate také umístil certifikát spolu s odpovídajícím soukromým klíčem do vašeho osobního úložiště. Odeberte ho z normální výzvy bez zvýšených oprávnění přihlášených jako účet, který běžel cert generate:
$thumbprint = 'ABCD...'
Remove-Item -Path "Cert:\CurrentUser\My\$thumbprint"
Important
Ve zobrazených kontextech spusťte výše uvedené dva příkazy. Pokud jste provedli elevaci pomocí jiného účtu správce, Cert:\CurrentUser v této relaci se zvýšenými oprávněními je úložiště tohoto správce — nikoli vaše — takže by soukromý klíč zůstal v úložišti uživatele, který ho vygeneroval.
Nakonec odstraňte .pfx a všechny kopie .cer, které jste rozdali, a zrušte registraci balíčků, které jste s ním nainstalovali bokem:
winapp unregister
Note
Odebráním certifikátu se neodinstalují balíčky, které už s ním byly nainstalované. Odinstalujte je samostatně v nabídce Nastavení > Aplikace > Nainstalované aplikace nebo pomocí winapp unregister pro balíčky registrované ve vývojovém režimu.
Vývojářský režim
Windows vyžaduje režim pro vývojáře, aby bylo možné zaregistrovat balíček aplikace přímo ze složky na disku – volné uspořádání – namísto instalace sestaveného a podepsaného balíčku MSIX. Příkazy jako winapp run a create-debug-identity na tom závisejí a bez toho selžou, přičemž winapp init nabízí, že to za vás zapne.
Co se změní po jeho povolení
CLI zapne režim pro vývojáře zápisem dvou hodnot DWORD pod HKEY_LOCAL_MACHINE:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock
AllowDevelopmentWithoutDevLicense = 1
AllowAllTrustedApps = 1
Protože se jedná o nastavení pro celý počítač, CLI spustí pomocný proces se zvýšenými oprávněními a Windows zobrazí výzvu Řízení uživatelských účtů. Pokud výzvu odmítnete, nic se nezmění.
Prakticky to znamená, že stroj bude:
- Zaregistrujte balíčky aplikací přímo ze složky na disku, aniž byste je museli zabudovat do MSIX nebo vůbec podepsat (
AllowDevelopmentWithoutDevLicense). - Nainstalujte balíčky aplikací mimo Microsoft Store, pokud jsou podepsané certifikátem důvěryhodnosti počítače , včetně jakéhokoli vývojového certifikátu v
TrustedPeople(AllowAllTrustedApps).
Important
Vývojářský režim a důvěryhodný vývojový certifikát je záměrné uvolnění výchozích omezení instalace. Tato kombinace patří do vývojových a testovacích počítačů. Nechte to vypnuté na produkčních strojích, kioscích a sdílené infrastruktuře.
Nastavení, kdy je povoleno
winapp init se zeptá před změnou čehokoli a --use-defaults zcela přeskočí otázku a ponechá vývojářský režim nedotčený. Díky tomu jsou skriptované skripty a CI ve výchozím nastavení bezpečné:
winapp init --use-defaults
Pokud byste chtěli toto nastavení raději spravovat sami, povolte ho jednou prostřednictvím systému > nastavení > pro vývojáře > a rozhraní příkazového řádku ho zjistí a přejde dál.
Vypnutí
Použijte systém > nastavení > pro vývojáře a vypněte režim vývojáře. Toto je doporučená cesta, protože nastavení také vyčistí přidružený stav operačního systému. Pokud si chcete hodnotu registru ověřit později:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock' `
-Name AllowDevelopmentWithoutDevLicense, AllowAllTrustedApps
Vypnutím vývojářského režimu neodeberete důvěryhodné certifikáty nebo už nainstalované balíčky – viz Odebrání důvěryhodného certifikátu.
Podepisování pro produkci
Vývojový certifikát funguje pouze pro lidi, kteří mu výslovně důvěřují. Pokud chcete aplikaci distribuovat, podepište ji identitou, které systém Windows již důvěřuje.
Volba podpisové identity
Důvěryhodné podepisování Azure – podpisová služba spravovaná v cloudu. Privátní klíč na vašem sestavovacím stroji nikdy neexistuje, takže není žádný
.pfx, který by bylo nutné chránit, který by mohl uniknout nebo který by bylo nutné ručně obměňovat. Použijtewinapp az-sign, který se ověřuje pomocí standardního řetězce přihlašovacích údajů Azure a pracuje s GitHub Actions OIDC nebo spravovanou identitou.winapp az-sign .\MyApp.msixCertifikát pro podepisování kódu od důvěryhodné certifikační autority – předejte jej do
winapp signjako druhý poziční argument a jeho heslo zadejte do--password. Pak jste zodpovědní za bezpečné uložení klíče; uchovávejte ho v hardwarovém tokenu, trezoru klíčů nebo úložišti tajných kódů poskytovatele CI a nikdy v úložišti.Microsoft Store – pokud distribuujete výhradně prostřednictvím Storu, podepíše vám balíček a před odesláním ho nemusíte podepisovat.
V každém případě musí subjekt certifikátu odpovídat hodnotě v manifestu Publisher , včetně pro řídké balíčky.
Uchovávejte tajné klíče pro podepisování mimo úložiště.
Hesla certifikátů patří do úložiště tajných kódů CI, ne do konfiguračního souboru. Přečtěte si je z prostředí místo jejich pevného kódování:
winapp sign .\MyApp.msix $env:SIGNING_CERT_PATH --password $env:SIGNING_CERT_PASSWORD
Totéž platí pro konfiguraci sestavení uloženou ve správě verzí, například konfiguraci Electron Forge — viz Balení aplikace Electron.
winapp az-sign zabraňuje problému zcela, protože neexistuje žádné heslo k předání.
Před publikováním
Krátký kontrolní seznam pro přechod z místního testování na distribuci:
- Balíček je podepsaný certifikátem vydaným certifikační autoritou, Důvěryhodné podepisování Azure nebo odeslán do Storu , nikoli pomocí
devcert.pfx. - Uvnitř zabaleného výstupu není žádný
.pfxsoubor nebo.cersoubor. - V potvrzených souborech, skriptech sestavení nebo protokolech CI se nezobrazuje žádné heslo certifikátu.
- Předmět certifikátu odpovídá manifestu
Publisher. - Vývojové certifikáty a režim vývojáře nejsou povolené na počítačích, na kterých je potřeba aplikaci pouze spustit.
Hlášení problému se zabezpečením
Pokud chcete nahlásit ohrožení zabezpečení v samotném rozhraní příkazového řádku winapp, postupujte podle postupu v SECURITY.md. Nevytvářejte prosím veřejný issue na GitHubu pro hlášení bezpečnostních problémů.
Příbuzná témata
Windows developer