建立套件簽署的憑證

本文章將說明如何使用 PowerShell 工具,以建立和匯出應用程式套件簽署的憑證。 建議您使用 Visual Studio 來封裝 UWP 應用程式和封裝傳統型應用程式,但如果您未使用 Visual Studio 開發應用程式,您仍然可以手動封裝應用程式。

必要條件

  • 已封裝或未封裝的應用程式
    包含 AppxManifest.xml 檔案的應用程式。 在建立用來簽署最終應用程式套件的憑證時,您會需要參考資訊清單檔。 如需如何手動封裝應用程式的詳細資訊,請參閱使用 MakeAppx.exe 工具建立應用程式套件

  • 公開金鑰基礎結構 (PKI) Cmdlet
    您需要 PKI cmdlet 來建立和匯出您的簽署憑證。 如需詳細資訊,請參閱 Public Key Infrastructure Cmdlets

建立自我簽署憑證

自我簽署憑證在準備好發佈至市集之前,適用于測試您的應用程式。 請遵循本節所述的步驟來建立自我簽署憑證。

注意

當您建立和使用自我簽署憑證時,只有安裝及信任憑證的使用者才能執行您的應用程式。 這很容易實作以進行測試,但可能會防止其他使用者安裝您的應用程式。 當您準備好發佈應用程式時,建議您使用受信任來源所簽發的憑證。 這種集中式信任系統有助於確保應用程式生態系統具有驗證層級,以保護使用者免于惡意執行者。

判斷您經過封裝之應用程式的主旨

若要使用憑證來簽署您的應用程式套件,憑證中的「主旨」必須符合您應用程式資訊清單中的「發行者」區段。

舉例來說,應用程式之 AppxManifest.xml 檔案中的「身分識別」區段看起來像這樣︰

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

本案例中的「發行者」為 "CN=Contoso Software, O=Contoso Corporation, C=US",而且您需要使用此項目來建立憑證。

使用 New-SelfSignedCertificate 來建立憑證

使用 New-SelfSignedCertificate PowerShell cmdlet 來建立自我簽署憑證。 New-SelfSignedCertificate 有數個可供自訂的參數,但為符合本篇文章的主旨,我們會著重於建立使用 *SignTool 的簡單憑證。 如需詳細範例以及此 Cmdlet 的使用方法,請參閱 New-SelfSignedCertificate

根據先前範例的 AppxManifest.xml 檔案,您應該使用下列語法來建立憑證。 在提升權限的 PowerShell 提示字元內︰

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}")

請注意下列部分參數的詳細資料:

  • KeyUsage:此參數會定義憑證的用途。 針對自我簽署憑證,此參數應設定為 DigitalSignature

  • TextExtension:此參數包含下列延伸模組的設定:

    • 擴充金鑰使用方式 (EKU) :此延伸模組表示可使用認證公開金鑰的其他用途。 對於自我簽署憑證,此參數應包含延伸字串 「2.5.29.37={text}1.3.6.1.5.5.7.3.3」,這表示憑證用於程式碼簽署。

    • 基本條件約束:此延伸模組指出憑證是否為憑證授權單位單位 (CA) 。 對於自我簽署憑證,此參數應該包含擴充字串 「2.5.29.19={text}」,這表示憑證是一個結束實體, (不是 CA) 。

執行此命令之後,憑證將會依照 "-CertStoreLocation" 參數新增至本機憑證存放區中。 命令的結果也會產生憑證的指紋。

您可以使用下列命令在 PowerShell 視窗中檢視您的憑證︰

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

這會顯示出您本機存放區中的所有憑證。

匯出憑證

若要將本機存放區的憑證匯出至個人資訊交換 (PFX) 檔案,請使用 Export-PfxCertificate Cmdlet。

在使用 Export-PfxCertificate 時,您必須建立並使用密碼,或使用 "-ProtectTo" 參數來指定能不需密碼即可存取檔案的使用者或群組。 請注意,如果您沒有使用 "-Password" 或 "-ProtectTo" 兩項參數中的其中一項,將會顯示錯誤訊息。

密碼使用方式

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

ProtectTo 使用方式

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

在您建立和匯出憑證之後,就可以使用 SignTool 登入您的應用程式套件。 如需手動封裝過程的下一個步驟,請參閱使用 SignTool 簽署應用程式套件 (英文)。

安全性考量

藉由將認證新增至本機電腦憑證存放區 (英文),您會對電腦上所有使用者的憑證信任造成影響。 建議您移除不再需要的憑證,以避免它們危害系統信任。