Säkerhetsvägledning

Winapp CLI gör det enkelt att utveckla lokala Windows: det kan generera ett signeringscertifikat, lita på det på datorn och aktivera utvecklarläge åt dig. Vart och ett av dessa steg ändrar datortillstånd eller skapar en fil som har en privat nyckel, så det hjälper till att veta exakt vad de gör.

På den här sidan förklaras konsekvensen av varje kommando, hur du ångrar det och vad du ska göra på olika sätt när du skickar. Utvecklingscertifikat och utvecklarläge är den normala sökvägen som stöds för lokal testning – målet här är att du förstår vad du väljer, inte att du undviker dem.

Utvecklingscertifikat

MSIX-paket måste signeras innan Windows installerar dem. För lokal testning winapp cert generate skapar du ett självsignerat certifikat så att du kan signera och installera ditt eget paket utan att köpa något.

Vad winapp cert generate skapar

Det genererade certifikatet är ett självsignerat slutentitetscertifikat för kodsignering:

Property Value
Key RSA 2048-bit, märkt som exporterbar
Signeringsalgoritm SHA-256 med RSA (PKCS#1 v1.5)
Nyckelanvändning Digital signatur
Förbättrad nyckelanvändning Kodsignering (1.3.6.1.5.5.7.3.3)
Grundläggande begränsningar Inte en certifikatutfärdare
Giltighet 365 dagar som standard (--valid-days)
Subjekt Måste stämma överens med Publisher i manifestet

Kommandot skriver två saker:

  • devcert.pfx i den aktuella katalogen (eller sökvägen som du anger till --output). Den här filen innehåller både certifikatet och dess privata nyckel.
  • En kopia av certifikatet i ditt personliga certifikatarkiv (Cert:\CurrentUser\My).

Med --export-cerskriver den också en .cer fil bredvid .pfx. Filen innehåller endast det offentliga certifikatet – ingen privat nyckel – vilket gör det till rätt sak att lämna till en lagkamrat eller en testdator som behöver lita på dina byggen.

Note

Ett självsignerat certifikat är inte betrott av någon förrän någon uttryckligen väljer att lita på det. Det är bra för din egen dator och dina egna testmaskiner; Det är inte en ersättning för en riktig kodsigneringsidentitet när du distribuerar din app.

Standardlösenordet

winapp cert generate använder password som PFX-lösenord om du inte skickar --password. Samma standard gäller när du senare anger certifikatet till winapp sign, vars lösenordsalternativ också --passwordär , och till winapp pack, som tar --cert-password.

Ett välkänt lösenord innebär att den privata nyckeln i devcert.pfx är i praktiken oskyddad – alla som hämtar filen kan signera kod med den. Det är en acceptabel kompromiss för ett engångscertifikat som endast används för att signera lokala testbyggen på din egen dator, och det är därför standardinställningen finns.

Important

Behandla standardlösenordet som en signal om att certifikatet är disponibelt. Om ett certifikat någonsin används för att signera något som en annan person kommer att installera bör det inte vara ett winapp cert generate certifikat med standardlösenordet – se Signering för produktion.

Skript och agenter behöver inte jämföra själva lösenordet: winapp cert generate --json rapporterar "defaultPasswordIsPublic": true och upprepar avslöjandet i en warnings matris när standardvärdet gäller. Se certifikatet generera JSON-utdata.

Var certifikatfilen finns

devcert.pfx är en privat nyckel på disken. Två regler håller det borta från problem:

Checka inte in det.winapp cert generate lägger automatiskt till certifikatets filnamn i .gitignore bredvid, så standardflödet täcks redan. Om du flyttar filen, byter namn på den eller genererar den i en katalog som hanteras av en annan .gitignore, kontrollera att posten följde med:

git check-ignore -v devcert.pfx

Om det inte ger något resultat ignoreras filen inte – lägg till den innan du gör en commit.

Paketera den inte.winapp pack paketerar allt i indatakatalogen, så att ett devcert.pfx som ligger i appens utdatamapp hamnar i det levererade MSIX-paketet. Generera certifikatet utanför den mapp som du paketerar, som guiden Paketera en EXE/CLI visar, och bekräfta att det saknas innan du distribuerar:

# 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

Om en .pfx med en verklig privat nyckel någonsin checkas in eller publiceras roterar du den: generera ett nytt certifikat, signera igen och sluta lita på den gamla med hjälp av stegen i Ta bort ett betrott certifikat. Att ta bort filen från en senare incheckning tar inte bort den från historiken.

Vilka winapp cert install bidrag

winapp cert install lägger till certifikatet i lagret LocalMachine\TrustedPeople. Detta kräver administratörsbehörighet eftersom det ändrar förtroendet för varje användare på datorn.

När ett certifikat är i TrustedPeopleaccepterar Windows alla MSIX-paket som signerats av certifikatet som tillräckligt betrodda för att installera – inte bara det paket som du testade. För ett certifikat vars privata nyckel du har och behåller lokalt är det exakt den avsedda effekten. Det är också anledningen till att vara medveten om det:

  • Lita på certifikat som du genererade själv, eller som kommer från någon som du skulle låta installera programvara på datorn.
  • Installera inte ett utvecklingscertifikat på delade datorer, produktions- eller byggdatorer som andra förlitar sig på.
  • Föredra att distribuera .cer (endast offentlig nyckel) snarare än .pfx när en kollega behöver installera ditt testpaket. De kan lita på dina byggen utan att kunna signera i ditt namn.

Om du vill lita på en .cer på en annan testdator kör du winapp cert install direkt på den – kommandot accepterar antingen en .pfx eller enbart offentlig .cer:

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

Motsvarande användning av endast inbyggda Windows verktyg är:

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

Ta bort ett betrott certifikat

Utvecklingscertifikat upphör att gälla efter ett år som standard, men förfallodatum tas inte bort. När du är klar med ett certifikat – projektet avslutades, datorn återanvänds eller nyckeln kan ha läckt ut – tar du bort den explicit.

Börja med att ta reda på dess tumavtryck:

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

Ta sedan bort den från datorns betrodda certifikatarkiv. Det här steget behöver utökas:

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

cert generate även placerat certifikatet, tillsammans med dess privata nyckel, i din personliga butik. Ta bort det från en normal kommandotolk utan förhöjda rättigheter, när du är inloggad med det konto som körde cert generate:

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

Important

Kör de två kommandona ovan i de kontexter som visas. Om du körde med förhöjda rättigheter med ett annat administratörskonto, Cert:\CurrentUser i den förhöjda sessionen är det administratörskontots certifikatarkiv – inte ditt – så den privata nyckeln skulle bli kvar i certifikatarkivet för den användare som skapade den.

Slutligen tar du bort .pfx och alla .cer kopior du delade ut, och avregistrerar de paket som du installerade manuellt med det:

winapp unregister

Note

Om du tar bort certifikatet avinstalleras inte paket som redan har installerats med det. Avinstallera dem separat via Inställningar > Appar > Installerade appar eller med winapp unregister för paket som registrerats i utvecklingsläge.

Utvecklarläge

Windows kräver utvecklarläge för att registrera ett apppaket direkt från en mapp på disk – en lös layout – i stället för att installera ett byggt, signerat MSIX. Kommandon som winapp run och create-debug-identity förlitar sig på det och misslyckas utan det, och winapp init erbjuder sig att aktivera det åt dig.

Vad som ändras när du aktiverar det

CLI aktiverar utvecklarläge genom att skriva två DWORD värden under HKEY_LOCAL_MACHINE:

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

Eftersom det här är datoromfattande inställningar startar CLI en förhöjd hjälpprocess och Windows visar en fråga om användarkontokontroll. Inget ändras om du avböjer uppmaningen.

I praktiken innebär detta att datorn kommer att:

  • Registrera apppaket direkt från en mapp på disk, utan att de är inbyggda i en MSIX eller signeras alls (AllowDevelopmentWithoutDevLicense).
  • Installera apppaket utanför Microsoft Store så länge de är signerade av ett certifikat som datorn litar på – inklusive eventuella utvecklingscertifikat i TrustedPeople (AllowAllTrustedApps).

Important

Utvecklarläge plus ett betrott utvecklingscertifikat är en avsiktlig lossning av standardinstallationsbegränsningarna. Den kombinationen hör hemma på utvecklings- och testdatorer. Låt det vara avstängt på produktionsmaskiner, kiosker och delad infrastruktur.

Styra när den är aktiverad

winapp init frågar innan du ändrar något, och hoppar över frågan helt och --use-defaults lämnar utvecklarläget orört. Det gör skript och CI-körningar säkra som standard:

winapp init --use-defaults

Om du hellre vill hantera inställningen själv aktiverar du den en gång via Inställningar > system > för utvecklare > Utvecklarläge och CLI identifierar den och går vidare.

Stänga av den

Använd Inställningssystem >> För utvecklare och inaktivera utvecklarläge . Det här är den rekommenderade metoden, eftersom Inställningar också rensar det associerade tillståndet i operativsystemet. Så här bekräftar du registervärdet efteråt:

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

Om du inaktiverar utvecklarläget tas inte betrodda certifikat eller redan installerade paket bort. Mer information finns i Ta bort ett betrott certifikat.

Signering för produktion

Ett utvecklingscertifikat fungerar bara för personer som uttryckligen har litat på det. Om du vill distribuera din app signerar du den med en identitet som Windows redan litar på.

Välj en signeringsidentitet

  • Betrodd Azure-signering – en molnhanterad signeringstjänst. Den privata nyckeln finns aldrig på din byggmaskin, så det finns inget .pfx att skydda, som kan läcka ut eller som behöver roteras manuellt. Använd winapp az-sign, som autentiserar med Azures standardkedja för autentiseringsuppgifter och fungerar med GitHub Actions OIDC eller hanterad identitet.

    winapp az-sign .\MyApp.msix
    
  • Ett kodsigneringscertifikat från en betrodd certifikatutfärdare – skicka det till winapp sign som det andra positionsargumentet med dess lösenord i --password. Du ansvarar sedan för att lagra nyckelmaterialet på ett säkert sätt; förvara den i en maskinvarutoken, ett nyckelvalv eller din CI-providers hemliga arkiv och aldrig på lagringsplatsen.

  • Microsoft Store – om du distribuerar exklusivt via Store signeras paketet åt dig och du behöver inte signera innan du skickar det.

I varje fall måste certifikatämnet matcha Publisher värdet i manifestet, inklusive för glesa paket.

Håll signeringshemligheter borta från kodförrådet

Certifikatlösenord hör hemma i ditt CI-hemlighetsarkiv, inte i en konfigurationsfil. Läs dem från miljön i stället för att hårdkoda dem:

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

Detsamma gäller för byggkonfiguration som är incheckad i källkontrollen, till exempel en elektronförgreningskonfiguration – se Elektronförpackning. winapp az-sign undviker problemet helt, eftersom det inte finns något lösenord att skicka.

Innan du publicerar

En kort checklista för övergången från lokal testning till distribution:

  • Paketet signeras med ett CA-utfärdat certifikat, Betrodd Azure-signering eller skickas till Store – inte med devcert.pfx.
  • Ingen fil av typen .pfx eller .cer finns i det paketerade resultatet.
  • Inget certifikatlösenord visas i bekräftade filer, byggskript eller CI-loggar.
  • Certifikatämnet matchar manifestet Publisher.
  • Utvecklingscertifikat och utvecklarläge är inte aktiverade på datorer som bara behöver köra appen.

Rapportera ett säkerhetsproblem

Om du vill rapportera en säkerhetsrisk i själva winapp CLI följer du processen i SECURITY.md. Vänligen öppna inte ett offentligt GitHub-ärende för att rapportera säkerhetsproblem.