Creare un certificato per la firma dei pacchetti

Questo articolo illustra come creare ed esportare un certificato per la firma del pacchetto dell'app usando gli strumenti di PowerShell. È consigliabile usare Visual Studio per creare pacchetti di app UWP e creare pacchetti di app desktop, ma è comunque possibile creare un pacchetto di un'app manualmente se non è stato Visual Studio sviluppare l'app.

Prerequisiti

  • Un'app in pacchetto o non in pacchetto
    Un'app contenente un AppxManifest.xml file. È necessario fare riferimento al file manifesto durante la creazione del certificato che verrà usato per firmare il pacchetto dell'app finale. Per informazioni dettagliate su come creare manualmente un pacchetto di un'app, vedere Creare un pacchetto dell'app con lo strumento MakeAppx.exe app.

  • Cmdlet dell'infrastruttura a chiave pubblica (PKI)
    Sono necessari cmdlet PKI per creare ed esportare il certificato di firma. Per altre informazioni, vedere Cmdlet dell'infrastruttura a chiave pubblica.

Creare un certificato autofirmato

Un certificato autofirmato è utile per testare l'app prima di poterla pubblicare in Store. Seguire i passaggi descritti in questa sezione per creare un certificato autofirmato.

Nota

Quando si crea e si usa un certificato autofirmato, solo gli utenti che installano e considera attendibile il certificato possono eseguire l'applicazione. Questo è facile da implementare per i test, ma può impedire ad altri utenti di installare l'applicazione. Quando si è pronti per pubblicare l'applicazione, è consigliabile usare un certificato emesso da un'origine attendibile. Questo sistema di attendibilità centralizzata consente di garantire che l'ecosistema di applicazioni abbia livelli di verifica per proteggere gli utenti da attori malintenzionati.

Determinare l'oggetto dell'app in pacchetto

Per usare un certificato per firmare il pacchetto dell'app, il "Soggetto" nel certificato deve corrispondere alla sezione "Publisher" nel manifesto dell'app.

Ad esempio, la sezione "Identity" nel file AppxManifest.xml'app dovrebbe essere simile alla seguente:

  <Identity Name="Contoso.AssetTracker" 
    Version="1.0.0.0" 
    Publisher="CN=Contoso Software, O=Contoso Corporation, C=US"/>

Il "Publisher", in questo caso, è "CN=Contoso Software, O=Contoso Corporation, C=US" che deve essere usato per creare il certificato.

Usare New-SelfSignedCertificate per creare un certificato

Usare il cmdlet New-SelfSignedCertificate di PowerShell per creare un certificato autofirmato. New-SelfSignedCertificate include diversi parametri per la personalizzazione, ma ai fini di questo articolo verrà illustrata la creazione di un certificato semplice che funzionerà con SignTool. Per altri esempi e usi di questo cmdlet, vedere New-SelfSignedCertificate.

In base al file AppxManifest.xml dell'esempio precedente, è necessario usare la sintassi seguente per creare un certificato. In un prompt di PowerShell con privilegi elevati:

New-SelfSignedCertificate -Type Custom -Subject "CN=Contoso Software, O=Contoso Corporation, C=US" -KeyUsage DigitalSignature -FriendlyName "Your friendly name goes here" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

Si notino i dettagli seguenti su alcuni parametri:

  • KeyUsage: questo parametro definisce per cosa può essere usato il certificato. Per un certificato autofirmato, questo parametro deve essere impostato su DigitalSignature.

  • TextExtension: questo parametro include le impostazioni per le estensioni seguenti:

    • Extended Key Usage (EKU): questa estensione indica scopi aggiuntivi per cui è possibile usare la chiave pubblica certificata. Per un certificato autofirmato, questo parametro deve includere la stringa di estensione "2.5.29.37={text}1.3.6.1.5.5.7.3.3", che indica che il certificato deve essere usato per la firma del codice.

    • Vincoli di base: questa estensione indica se il certificato è un'autorità di certificazione (CA). Per un certificato autofirmato, questo parametro deve includere la stringa di estensione "2.5.29.19={text}", che indica che il certificato è un'entità finale (non una CA).

Dopo aver eseguito questo comando, il certificato verrà aggiunto all'archivio certificati locale, come specificato nel parametro "-CertStoreLocation". Il risultato del comando produrrà anche l'identificazione personale del certificato.

È possibile visualizzare il certificato in una finestra di PowerShell usando i comandi seguenti:

Set-Location Cert:\CurrentUser\My
Get-ChildItem | Format-Table Subject, FriendlyName, Thumbprint

Verranno visualizzati tutti i certificati nell'archivio locale.

Esportare un certificato

Per esportare il certificato nell'archivio locale in un file PFX (Personal Information Exchange), usare il cmdlet Export-PfxCertificate.

Quando si usa Export-PfxCertificate, è necessario creare e usare una password oppure usare il parametro "-ProtectTo" per specificare quali utenti o gruppi possono accedere al file senza una password. Si noti che verrà visualizzato un errore se non si usa il parametro "-Password" o "-ProtectTo".

Utilizzo delle password

$password = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $password

Utilizzo di ProtectTo

Export-PfxCertificate -cert Cert:\CurrentUser\My\<Certificate Thumbprint> -FilePath <FilePath>.pfx -ProtectTo <Username or group name>

Dopo aver creato ed esportato il certificato, si è pronti per firmare il pacchetto dell'app con SignTool. Per il passaggio successivo del processo di creazione manuale dei pacchetti, vedere Firmare un pacchetto di app usando SignTool.

Considerazioni sulla sicurezza

L'aggiunta di un certificato agli archivi certificati del computer locale influisce sull'attendibilità del certificato di tutti gli utenti del computer. È consigliabile rimuovere tali certificati quando non sono più necessari per impedire che vengano usati per compromettere l'attendibilità del sistema.