Anteckning
Å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.
Not
Information om hur du signerar ett Windows-apppaket finns i Sign an app package using SignTool.
Lär dig hur du använder SignTool- för att signera dina Windows-apppaket så att de kan distribueras. SignTool ingår i Windows Software Development Kit (SDK).
Alla Windows-apppaket måste vara digitalt signerade innan de kan distribueras. Microsoft Visual Studio 2012 och senare kan signera ett apppaket när det skapas, men paket som du skapar med hjälp av -apppaketeraren (MakeAppx.exe) verktyget från Windows SDK signeras inte.
Not
Du kan bara använda SignTool- för att signera dina Windows-apppaket på Windows 8 och senare eller Windows Server 2012 och senare. Du kan inte använda SignTool- för att signera apppaket på operativsystem på nednivå, till exempel Windows 7 eller Windows Server 2008 R2.
Vad du behöver veta
Teknologier
- Introduktion till kodsignering
- App-paket och distributionspaket
- verktyg för att signera filer och kontrollera signaturer
Förutsättningar
SignTool, som ingår i Windows SDK
Ett giltigt kodsigneringscertifikat, till exempel en Fil för Personal Information Exchange (.pfx) som skapats med verktygen MakeCert.exe och Pvk2Pfx.exe
Information om hur du skapar ett giltigt kodsigneringscertifikat finns i Så här skapar du ett signeringscertifikat för apppaket.
En paketerad Windows-app, till exempel en .appx fil som skapats med hjälp av -apppaketeraren (MakeAppx.exe)-verktyget
Ytterligare överväganden
Certifikatet som du använder för att signera apppaketet måste uppfylla följande kriterier:
Certifikatets ämnesnamn måste matcha attributet Publisher som finns i Identity-elementet i den AppxManifest.xml fil som lagras i paketet. Utgivarens namn är en del av identiteten för en paketerad Windows-app, så du måste göra så att certifikatets ämnesnamn matchar appens utgivarnamn. Detta gör att identiteten för signerade paket kan kontrolleras mot den digitala signaturen. Information om signeringsfel som kan uppstå vid signering av ett apppaket med hjälp av SignTool-finns i avsnittet Anmärkningar i Så här skapar du ett signeringscertifikat för apppaket.
Certifikatet måste vara giltigt för kodsignering. Det innebär att båda dessa objekt måste vara sanna:
- EKU-fältet (Extended Key Usage) för certifikatet måste antingen tas bort eller innehålla EKU-värdet för kodsignering (1.3.6.1.5.5.7.3.3).
- Fältet Nyckelanvändning (KU) för certifikatet måste antingen vara obestämt eller innehålla biten för digital signatur (0x80).
Certifikatet innehåller en privat nyckel.
Certifikatet är giltigt. Den är aktiv, har inte upphört att gälla och har inte återkallats.
Instruktioner
Steg 1: Fastställa vilken hash-algoritm som ska användas
När du signerar apppaketet måste du använda samma hash-algoritm som du använde när du skapade apppaketet. Om du använde standardinställningarna för att skapa apppaketet är den hash-algoritm som används SHA256.
Om du använde apppaketeraren med en specifik hashalgoritm för att skapa apppaketet använder du samma algoritm för att signera paketet. För att fastställa vilken hash-algoritm som ska användas för att signera ett paket kan du extrahera paketinnehållet och granska AppxBlockMap.xml-filen. Attributet HashMethod för elementet BlockMap anger hash-algoritmen som användes när apppaketet skapades. Till exempel:
<BlockMap xmlns="http://schemas.microsoft.com/appx/2010/blockmap"
HashMethod="https://www.w3.org/2001/04/xmlenc#sha256">
Föregående BlockMap--element anger att SHA256-algoritmen användes. I den här tabellen visas mappningen av de tillgängliga algoritmerna:
| HashMethod värde | hash-algoritm att använda |
|---|---|
| https://www.w3.org/2001/04/xmlenc#sha256 | SHA256 (.appx förval) |
| https://www.w3.org/2001/04/xmldsig-more#sha384 | SHA384 |
| https://www.w3.org/2001/04/xmlenc#sha512 | SHA512 |
Steg 2: Kör SignTool.exe för att signera paketet
Signera paketet med ett signeringscertifikat från en .pfx-fil
-
SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password filepath.appx
SignTool använder SHA1 som standard för parametern /fd hashAlgorithm om den inte har angetts, och SHA1 är inte giltig för signering av apppaket. Därför måste du ange den här parametern när du signerar ett apppaket. Om du vill signera ett apppaket som skapades med sha256-standardhash anger du parametern /fd hashAlgorithm som SHA256:
SignTool sign /fd SHA256 /a /f signingCert.pfx /p password filepath.appx
Du kan utelämna parametern /p lösenord om du använder en .pfx-fil som inte är lösenordsskyddad. Du kan också använda andra alternativ för val av certifikat som stöds av SignTool- för att signera apppaket. Mer information om dessa alternativ finns i SignTool.
Not
Du kan inte använda åtgärden SignTool tidsstämpel i ett signerat apppaket. Åtgärden stöds inte.
Om du vill tidsstämpla apppaketet måste du göra det under signeringsåtgärden. Till exempel:
SignTool sign /fd hashAlgorithm /a /f signingCert.pfx /p password /tr timestampServerUrl
filepath.appx
Gör parametern /tr timestampServerUrl lika med URL:en för en RFC 3161-tidsstämpelserver.
Anmärkningar
I det här avsnittet beskrivs felsökning av signeringsfel för apppaket.
Felsöka fel vid signering av apppaket
Förutom de signeringsfel som SignTool- kan returnera kan SignTool- också returnera fel som är specifika för signering av apppaket. Dessa fel visas vanligtvis som interna fel:
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B)
Om felkoden börjar med 0x8008, till exempel 0x80080206 APPX_E_CORRUPT_CONTENT), indikerar det att paketet som signeras är ogiltigt. I det här fallet måste du återskapa paketet innan du kan signera paketet. En fullständig lista över 0x8008* fel finns i COM-felkoder (säkerhet och installation).
Mer vanligt är felet 0x8007000b (ERROR_BAD_FORMAT). I det här fallet kan du hitta mer specifik felinformation i händelseloggen:
Så här söker du i händelseloggen
- Kör Eventvwr.msc.
- Öppna händelseloggen: Händelsevisare (lokal) > program- och tjänsteloggar > Microsoft > Windows > AppxPackagingOM > Microsoft-Windows-AppxPackaging/Operational
- Leta efter den senaste felhändelsen.
Det interna felet motsvarar vanligtvis något av följande:
| Händelse-ID | Exempel på händelsesträng | Förslag |
|---|---|---|
| 150 | fel 0x8007000B: Utgivarnamnet för appmanifestet (CN=Contoso) måste matcha ämnesnamnet för signeringscertifikatet (CN=Contoso, C=US). | Utgivarens namn för appmanifestet måste exakt matcha signeringens ämnesnamn.
Obs! Dessa namn anges inom citattecken och är både skiftläges- och blankstegskänsliga. Du kan uppdatera attributsträngen Publisher som har definierats för elementet Identity i AppxManifest.xml-filen så att det matchar ämnesnamnet för det avsedda signeringscertifikatet. Du kan också välja ett annat signeringscertifikat med ett ämnesnamn som matchar appens manifestutgivarnamn. Manifestutgivarens namn och certifikatets ämnesnamn visas båda i händelsemeddelandet. |
| 151 | fel 0x8007000B: Den angivna signaturhashmetoden (SHA512) måste matcha hash-metoden som används i programpaketblockkartan (SHA256). | HashAlgorithm som anges i parametern /fd är felaktig (se Steg 1: Fastställa vilken hash-algoritm som ska användas). Kör om SignTool med hashAlgorithm som matchar blockkartan för app-paketet. |
| 152 | fel 0x8007000B: Innehållet i apppaketet måste verifieras mot dess blockkarta. | Apppaketet är skadat och måste återskapas för att generera en ny blockkarta. Mer information om hur du skapar ett apppaket, se Skapa ett apppaket med app packager eller Skapa ett apppaket med Visual Studio 2012. |
Säkerhetshänsyn
När paketet har signerats måste certifikatet som du använde för att signera paketet fortfarande vara betrott av den dator där paketet ska distribueras. Genom att lägga till ett certifikat i lokala datorcertifikatarkivetpåverkar du certifikatförtroendet för alla användare på datorn. Vi rekommenderar att du installerar alla kodsigneringscertifikat som du vill använda för att testa apppaket i certifikatarkivet Betrodda personer och snabbt ta bort dessa certifikat när de inte längre behövs. Om du skapar egna testcertifikat för signering av apppaket rekommenderar vi också att du begränsar de behörigheter som är associerade med testcertifikatet. Mer information om hur du skapar testcertifikat för signering av apppaket finns i Så här skapar du ett signeringscertifikat för apppaket.