VisualStudio
codesign
UWP

[UWP]コードサイン証明書でアプリパッケージを署名するときにトラブったのでメモ

More than 1 year has passed since last update.

はじめに

UWPアプリをサイドローディング可能なパッケージとして配布するためには、コードサイン証明書(テスト証明書ではなく信頼できる証明機関から入手した正式なもの)でパッケージを署名する必要がある。このときちょっとトラブったのでメモ。

Visual Studioで証明書を取り込めない

Visual StudioでUWPアプリパッケージをサインするために、プロジェクトの Package.appxmanifest を開いて、[パッケージ化]-[発行者]-[証明書の選択]で証明書を選ぶ。ここでエラーがでた。曰く、「マニフェスト デザイナーは証明書をインポートできませんでした」と。

MSBuildの設定を変更する

これだった。

Visual Studio によって実行される検証チェックを決定する
https://msdn.microsoft.com/ja-jp/library/br230260.aspx#Decide

実際に行った設定変更は、
(VS Community 2015の場合)
c:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\V14.0\AppxPackage\Microsoft.AppxPackage.Targets
(VS Community 2017の場合)
c:\Program Files(x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\VisualStudio\v15.0\AppxPackage\Microsoft.AppxPackage.Targets

を開いて

Microsoft.AppxPackage.Targets
<PropertyGroup>
    ...
    <EnableSigningChecks Condition=" '$(EnableSigningChecks)' == '' ">true</EnableSigningChecks>
    ...
</PropertyGroup>

を探して

Microsoft.AppxPackage.Targets
<PropertyGroup>
    ...
    <EnableSigningChecks Condition=" '$(EnableSigningChecks)' == '' ">false</EnableSigningChecks>
    ...
</PropertyGroup>

に変更。証明書が使えるようになった。

何が問題だったのか

手元の証明書には[基本制限](Basic Constraints) フィールドが存在しておらず、

プロパティを True (既定値) に設定すると、次の追加のチェックが Visual Studio によって実行されます。

  • [基本的な制約] 拡張機能の存在とその値を確認します。値は Subject Type=End Entity か、未指定かのいずれかである必要があります。

https://msdn.microsoft.com/ja-jp/library/br230260.aspx#Decide

この条件に引っかかったのかも?詳しくないので本当のところは分からないが。