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 la creazione di pacchetti di app UWP e app desktop,ma è comunque possibile creare il pacchetto di un'app manualmente se non si usa Visual Studio per sviluppare l'app.

Prerequisiti

  • Un'app in pacchetto o non in pacchetto
    App contenente un file AppxManifest.xml. Sarà 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 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. È 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 ha diversi parametri per la personalizzazione, ma ai fini di questo articolo ci si concentrerà sulla creazione di un certificato semplice che funzionerà con SignTool. Per altri esempi e usi di questo cmdlet, vedere New-SelfSignedCertificate.

In base al AppxManifest.xml file 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:

    • Utilizzo chiavi esteso (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

Uso 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 dell'app usando SignTool.

Considerazioni relative alla sicurezza

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