Biztonsági útmutató

A winapp CLI megkönnyíti a helyi Windows fejlesztését: létrehozhat aláíró tanúsítványt, megbízhat benne a gépen, és bekapcsolhatja a fejlesztői módot. Mindegyik lépés megváltoztatja a gép állapotát, vagy létrehoz egy titkos kulcsot tartalmazó fájlt, így segít pontosan tudni, hogy mit csinálnak.

Ez az oldal bemutatja az egyes parancsok következményeit, a visszavonás módját, valamint azt, hogy mi a teendő másként a szállításkor. A fejlesztési tanúsítványok és a fejlesztői mód a helyi tesztelés normál, támogatott útvonala – a cél itt az, hogy megértse, mit választ, és ne kerülje el őket.

Fejlesztési tanúsítványok

Az MSIX-csomagokat alá kell írni, mielőtt Windows telepíti őket. A helyi teszteléshez létrehoz egy önaláírt tanúsítványt, amely lehetővé teszi a saját csomag aláírását és telepítését anélkül, winapp cert generate hogy bármit vásárolna.

Amit winapp cert generate létrehoz

A létrehozott tanúsítvány egy önaláírt, végfelhasználói kódaláíró tanúsítvány:

Property Érték
Key 2048 bites RSA, exportálhatónak jelölt
Aláírási algoritmus SHA-256 RSA-val (PKCS#1 v1.5)
Kulcshasználat Digitális aláírás
Továbbfejlesztett kulcshasználat Kódaláírás (1.3.6.1.5.5.7.3.3)
Alapvető korlátozások Nem hitelesítésszolgáltató
Érvényesség Alapértelmezés szerint 365 nap (--valid-days)
Subject Meg kell egyeznie a manifestfájlban szereplő Publisher elemmel

A parancs két dolgot ír:

  • devcert.pfx az aktuális könyvtárban (vagy a(z) --output számára megadott elérési úton). Ez a fájl tartalmazza mind a tanúsítványt, mind a privát kulcsát.
  • A tanúsítvány másolata a személyes tanúsítványtárolóban (Cert:\CurrentUser\My).

A(z) --export-cer használatakor a(z) .pfx mellé egy .cer fájlt is létrehoz. Ez a fájl csak a nyilvános tanúsítványt tartalmazza — privát kulcsot nem —, ezért ezt nyugodtan átadhatod egy csapattársnak vagy egy tesztgépnek, amelynek meg kell bíznia a buildjeidben.

Note

Az önaláírt tanúsítványokat senki sem megbízhatónak minősíti, amíg valaki nem bízik benne kifejezetten. Ez megfelelő a saját gépén és a saját tesztgépein; nem helyettesíti a valódi kódaláírási identitást, amikor terjeszti az alkalmazását.

Az alapértelmezett jelszó

winapp cert generate a(z) password értéket használja PFX-jelszóként, kivéve, ha megadja a(z) --password paramétert. Ugyanez az alapértelmezett érték érvényes akkor is, amikor később megadja ezt a tanúsítványt a(z) winapp sign számára, amelynek jelszóbeállítása szintén --password, valamint a(z) winapp pack számára, amely a(z) --cert-password paramétert fogadja.

A jól ismert jelszó azt jelenti, hogy a titkos kulcs devcert.pfx hatékonyan védtelen – bárki, aki beszerezi a fájlt, aláírhatja vele a kódot. Ez elfogadható kompromisszum egy olyan eldobható tanúsítvány esetében, amelyet kizárólag a saját gépén készített helyi tesztbuild-ek aláírására használnak, és ezért létezik ez az alapértelmezett beállítás.

Important

Az alapértelmezett jelszót úgy kezelje, mint egy jelet, amely jelzi, hogy a tanúsítvány eldobható. Ha egy tanúsítványt arra használnak, hogy aláírjanak vele valamit, amit egy másik személy fog telepíteni, akkor az nem lehet egy alapértelmezett jelszóval ellátott winapp cert generate tanúsítvány – lásd a Aláírás éles környezetben című részt.

A szkripteknek és az ügynököknek nem kell saját maguknak összehasonlítaniuk a jelszót: winapp cert generate --json jelenti "defaultPasswordIsPublic": true , és megismétli a közzétételt egy warnings tömbben, amikor az alapértelmezés van érvényben. Lásd a tanúsítvány JSON-kimenetének generálása című témakört.

A tanúsítványfájl helye

devcert.pfx egy privát kulcs a lemezen. Két szabály tartja távol a bajtól:

Ne véglegesítse.winapp cert generate automatikusan hozzáfűzi a tanúsítvány fájlnevét a .gitignore mellette lévő fájlhoz, így az alapértelmezett folyamat már le van fedve. Ha áthelyezi a fájlt, átnevezi, vagy egy másik .gitignore által felügyelt könyvtárba generálja, ellenőrizze, hogy a bejegyzés is követte-e:

git check-ignore -v devcert.pfx

Ha ez nem ír ki semmit, a fájl nincs ignorálva — add hozzá a commit előtt.

Ne csomagolja be.winapp pack a bemeneti könyvtárban található összes fájlt becsomagolja, így az alkalmazás kimeneti mappájában található devcert.pfx is belekerül a leszállított MSIX-csomagba. A tanúsítványt azon a mappán kívül hozza létre, amelyet becsomagol, ahogy azt a EXE/CLI csomagolási útmutató is mutatja, és terjesztés előtt győződjön meg arról, hogy nincs ott:

# 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

Ha egy valódi privát kulccsal rendelkező .pfx valaha commitba kerül vagy közzéteszik, cserélje le: hozzon létre egy új tanúsítványt, írja alá ismét, és a régi megbízhatóságát szüntesse meg a Megbízható tanúsítvány eltávolítása című részben leírt lépések szerint. A fájl későbbi véglegesítésből való törlése nem távolítja el az előzményekből.

Milyen winapp cert install támogatások

winapp cert install hozzáadja a tanúsítványt az LocalMachine\TrustedPeople áruházhoz. Ehhez rendszergazdai jogosultságokra van szükség, mert ez megváltoztatja a gép minden felhasználójának megbízhatóságát.

Ha egy tanúsítvány be van advaTrustedPeople, Windows a tanúsítvány által aláírt MSIX-csomagokat a telepítéshez elég megbízhatóként fogadja el – nem csak a tesztelt csomagot. Olyan tanúsítvány esetében, amelynek a titkos kulcsát helyben tartja és tartja, pontosan ez a kívánt hatás. Ez az oka annak is, hogy tudatosnak kell lennünk ezzel kapcsolatban:

  • Megbízhatósági tanúsítványok, amelyeket ön hozott létre, vagy amelyek olyan személytől származnak, aki lehetővé tenné a szoftver telepítését a gépen.
  • Ne telepítsen fejlesztési tanúsítványt olyan megosztott, éles vagy buildelési gépekre, amelyekre mások támaszkodnak.
  • Inkább a .cer (csak nyilvános kulcs) terjesztését részesítse előnyben, mint azt, .pfx amikor egy munkatársnak telepítenie kell a tesztcsomagot. Képessé válnak arra, hogy megbízzanak az Ön buildjeiben, anélkül hogy megszereznék a képességet arra, hogy az Ön nevében írjanak alá.

Ha egy másik tesztgépen szeretne megbízni egy .cer-ban/-ben, közvetlenül azon futtassa a winapp cert install parancsot — a parancs vagy egy .cer-t, vagy egy csak nyilvános .pfx-t fogad el:

# Run as Administrator
winapp cert install .\devcert.cer

Ennek megfelelője csak a beépített Windows eszköz használata esetén a következő:

# Run as Administrator
Import-Certificate -FilePath .\devcert.cer -CertStoreLocation Cert:\LocalMachine\TrustedPeople

Megbízható tanúsítvány eltávolítása

A fejlesztési tanúsítványok alapértelmezés szerint egy év után lejárnak, de a lejárat nem egyenlő az eltávolítással. Ha már nincs szükség egy tanúsítványra — mert a projekt befejeződött, a gépet más célra használják, vagy a kulcs kiszivároghatott — kifejezetten távolítsa el.

Először keresse meg az ujjlenyomatát:

Get-ChildItem Cert:\LocalMachine\TrustedPeople |
    Where-Object { $_.Subject -like '*CN=Contoso*' } |
    Format-List Subject, Thumbprint, NotAfter

Ezután távolítsa el a gép megbízhatósági tárolójából. Ehhez a lépéshez emelt szintű jogosultság szükséges:

# Run as Administrator. Replace with the thumbprint from the previous command.
$thumbprint = 'ABCD...'
Remove-Item -Path "Cert:\LocalMachine\TrustedPeople\$thumbprint"

cert generate a tanúsítványt a titkos kulcsával együtt a személyes tárolóban is elhelyezte. Távolítsa el ezt egy normál, nem emelt jogosultságú parancssorból, azzal a fiókkal bejelentkezve, amely futtatta a cert generate:

$thumbprint = 'ABCD...'
Remove-Item -Path "Cert:\CurrentUser\My\$thumbprint"

Important

Futtassa a fenti két parancsot a megjelenített környezetekben. Ha egy másik rendszergazdai fiókkal hajtotta végre a jogosultságemelést, Cert:\CurrentUser ebben az emelt jogosultságú munkamenetben annak a rendszergazdának a tárolója — nem az Öné —, így a titkos kulcs a létrehozó felhasználó tárolójában maradna ott.

Végül törölje a .pfx elemet és a kiosztott .cer példányokat, majd szüntesse meg a vele oldalról betöltött csomagok regisztrációját:

winapp unregister

Note

A tanúsítvány eltávolítása nem távolítja el a már telepített csomagokat. Távolítsa el ezeket külön a Beállítások > Alkalmazások > Telepített alkalmazások útvonalon, illetve a fejlesztői módban regisztrált csomagok esetében a winapp unregister használatával.

Fejlesztői mód

Windows megköveteli, hogy a fejlesztői mód közvetlenül egy lemezen lévő mappából – laza elrendezésből – regisztráljon egy alkalmazáscsomagot ahelyett, hogy beépített, aláírt MSIX-t telepítene. Az olyan parancsok, mint a winapp run és a create-debug-identity, erre támaszkodnak, és nélküle nem működnek, a winapp init pedig felajánlja, hogy bekapcsolja Önnek.

Mit változtat a bekapcsolása

A CLI a fejlesztői módot úgy engedélyezi, hogy két HKEY_LOCAL_MACHINE értéket ír be a DWORD alá:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock
    AllowDevelopmentWithoutDevLicense = 1
    AllowAllTrustedApps               = 1

Mivel ezek gépi szintű beállítások, a parancssori felület emelt szintű segédfolyamatot indít el, és Windows megjelenik egy felhasználói fiókvezérlési kérés. Semmi sem változik, ha elutasítja a kérést.

Gyakorlatilag ez azt jelenti, hogy a gép:

  • Alkalmazáscsomagok regisztrálása közvetlenül a lemezen lévő mappából anélkül, hogy azokat beépítették egy MSIX-be, vagy egyáltalán alá se írták (AllowDevelopmentWithoutDevLicense).
  • Telepítse a Microsoft Store-on kívülről származó alkalmazáscsomagokat, amennyiben azokat a gép által megbízhatónak tekintett tanúsítvány írja alá – beleértve a(z) AllowAllTrustedApps (TrustedPeople) fejlesztési tanúsítványokat is.

Important

A fejlesztői mód és a megbízható fejlesztői tanúsítvány az alapértelmezett telepítési korlátozások szándékos lazítása. Ez a kombináció fejlesztői és tesztgépekre való. Hagyja kikapcsolva éles gépeken, kioszkokon és megosztott infrastruktúrában.

Annak szabályozása, hogy mikor van engedélyezve

winapp init kérdéseket tesz fel, mielőtt bármit módosítana, és --use-defaults teljesen kihagyja a kérdést, így a fejlesztői mód érintetlen marad. Ez alapértelmezés szerint biztonságossá teszi a szkripteket és a CI-futtatásokat:

winapp init --use-defaults

Ha inkább saját maga kezelné a beállítást, engedélyezze egyszer a fejlesztői > beállítások > rendszerén > keresztül, és a parancssori felület észleli, és továbblép.

Kikapcsolás

Használja a Beállítások > rendszert > fejlesztőknek , és kapcsolja ki a fejlesztői módot . Ez az ajánlott elérési út, mivel a Beállítások a társított operációsrendszer-állapotot is törli. A beállításjegyzék értékének későbbi ellenőrzéséhez:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock' `
    -Name AllowDevelopmentWithoutDevLicense, AllowAllTrustedApps

A fejlesztői mód kikapcsolása nem távolítja el a megbízható tanúsítványokat vagy a már telepített csomagokat – lásd : Megbízható tanúsítvány eltávolítása.

Éles környezethez történő aláírás

A fejlesztési tanúsítvány csak olyan személyek számára működik, akik kifejezetten megbíztak benne. Az alkalmazás terjesztéséhez írja alá egy olyan azonosítóval, amelyben a Windows már megbízik.

Aláírási identitás kiválasztása

  • Megbízható Azure-aláírás – felhőalapú aláírási szolgáltatás. A titkos kulcs soha nem létezik a buildelési gépen, ezért nem .pfx lehet kézzel védeni, kiszivárogni vagy elforgatni. Használja a winapp az-sign elemet, amely az Azure szabványos hitelesítőadat-láncával hitelesít, és működik a GitHub Actions OIDC-vel vagy felügyelt identitással.

    winapp az-sign .\MyApp.msix
    
  • Egy megbízható hitelesítésszolgáltatótól származó kódaláíró tanúsítvány – adja meg a(z) winapp sign számára második pozicionális argumentumként, a jelszavát pedig a(z) --password elemben. Ezután Ön felelős a kulcsanyag biztonságos tárolásáért; tárolja hardveres tokenben, kulcstárolóban vagy a CI-szolgáltató titkos tárolójában, és soha ne a tárolóban.

  • A Microsoft Store – ha kizárólag az Áruházon keresztül terjeszti, aláírja a csomagot, és nem kell aláírnia a beküldés előtt.

A tanúsítvány tulajdonosának minden esetben meg kell egyeznie a Publisher jegyzékben szereplő értékkel, beleértve a ritka csomagokat is.

Tartsa távol az aláíráshoz használt titkos kulcsokat a kódtártól

A tanúsítványjelszavak nem konfigurációs fájlban, hanem a CI titkos tárában találhatóak. Olvassa el őket a környezetből ahelyett, hogy kemény kódolást alkalmaz:

winapp sign .\MyApp.msix $env:SIGNING_CERT_PATH --password $env:SIGNING_CERT_PASSWORD

Ugyanez vonatkozik a verziókezelőbe bejelentkeztetett buildkonfigurációra is, például egy Electron Forge-konfigurációra — lásd: Electron-csomagolás. winapp az-sign teljes mértékben elkerüli a problémát, mert nincs átadandó jelszó.

Közzététel előtt

A helyi tesztelésről a terjesztésre való áttérés rövid ellenőrzőlistája:

  • A csomag CA által kiadott tanúsítvánnyal vagy Megbízható Azure-aláírás használatával van aláírva, illetve be van küldve az Áruházba — nem ezzel: devcert.pfx.
  • Sem a .pfx, sem a .cer fájl nincs a csomagolt kimenetben.
  • Nem jelenik meg tanúsítványjelszó a véglegesített fájlokban, buildszkriptekben vagy CI-naplókban.
  • A tanúsítvány tárgya megegyezik a jegyzékfájlval Publisher.
  • A fejlesztői tanúsítványok és a fejlesztői mód nem engedélyezett olyan gépeken, amelyeknek csak az alkalmazást kell futtatniuk .

Biztonsági probléma bejelentése

Ha biztonsági rést szeretne jelenteni a winapp parancssori felületén, kövesse a SECURITY.md folyamatát. Biztonsági bejelentésekhez kérjük, ne nyissanak nyilvános GitHub issue-t.