Condividi tramite


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 manualmente il pacchetto di un'app 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. Dovrai fare riferimento al file manifesto durante la creazione del certificato che verrà usato per firmare il pacchetto finale dell'app. Per informazioni dettagliate su come creare manualmente un pacchetto di un'app, vedere Creare un pacchetto dell'app con lo strumento MakeAppx.exe.

  • Cmdlet PKI (Public Key Infrastructure)
    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 essere pronti per pubblicarlo nello 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 considerano attendibile il certificato possono eseguire l'applicazione. Questa operazione è facile da implementare per i test, ma potrebbe impedire ad altri utenti di installare l'applicazione. Quando si è pronti per pubblicare l'applicazione, è consigliabile usare un certificato rilasciato 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 dell'app dovrebbe essere simile alla seguente:

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

"Publisher", in questo caso, è "CN=Contoso Software, O=Contoso Corporation, C=US" che deve essere usato per la creazione del certificato.

Usare New-SelfSignedCertificate per creare un certificato

Usare il cmdlet Di PowerShell New-SelfSignedCertificate per creare un certificato autofirmato. New-SelfSignedCertificate include diversi parametri per la personalizzazione, ma ai fini di questo articolo ci concentreremo sulla 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, è consigliabile 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 quale 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 i quali può essere usata 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 di autofirma, 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), utilizzare 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 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

ProtectTo usage

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 con SignTool.

Considerazioni sulla sicurezza

Aggiungendo un certificato agli archivi certificati del computer locale, si 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.