Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.pfxi 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.pfxnä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
.pfxatt skydda, som kan läcka ut eller som behöver roteras manuellt. Användwinapp az-sign, som autentiserar med Azures standardkedja för autentiseringsuppgifter och fungerar med GitHub Actions OIDC eller hanterad identitet.winapp az-sign .\MyApp.msixEtt kodsigneringscertifikat från en betrodd certifikatutfärdare – skicka det till
winapp signsom 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
.pfxeller.cerfinns 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.
Relaterade ämnen
Windows developer