Introduction
忘備録。
通常、Visual Studio を使ってコードサイニング証明書による署名を行った場合、タイムスタンプによる署名を忘れてしまい、コードサイニング証明書の有効期限が切れると、署名されたパッケージのインストールができなくなってしまう。
下記は有効期限がきれたパッケージのインストールを試みた場合のエラーである。
1 | $ .\Install.ps1 |
このような場合でも、ビルドしなおすことなく、再署名することができる。
How to do?
状況によって手順が異なる。
証明書はこんな感じで作られたものを使用していたとする。
10分後に期限が切れる証明書である。
1 | New-SelfSignedCertificate -Type Custom ` |
Publisher が同一の場合
再署名対象のパッケージの Publisher
と再署名に用いる証明書の Subject
が同一の場合。
下記のようなケース
Package.appxmanifest
1 | <Identity |
証明書
再署名のコマンド
新しい証明書を作成する。
1 | New-SelfSignedCertificate -Type Custom ` |
上記のダイアログから拇印を確認します。
その後、下記のコマンドを実行。Demo_1.0.0.0_x86_x64_arm_Debug.cer
は再署名するパッケージに含まれているものと同じ名前にすること。
1 | Export-Certificate -Cert cert:\currentuser\my\DD96DD85D29D386C201985E86C40742A0740F812 ` |
実行後、
- Demo_1.0.0.0_x86_x64_arm_Debug.cer
- key.pfx
が生成される。Demo_1.0.0.0_x86_x64_arm_Debug.cer
をパッケージに入っていたものと入れ替えます。
次に下記を実行。
1 | > "C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\signtool.exe" sign /fd sha256 ^ |
以上でパッケージが再署名された。/t
はなくてもよいが、つけると下記のようにタイムスタンプ付になる。
再度インストールを試みる。
1 | $ .\Install.ps1 |
成功する。
Publisher が異なる
このケースは少し面倒。
また、*.msix
の場合は上手く言ったが、*.msixbundle
には成功しなかったので、下記の手順は一部違う点がある事に注意。
新しく下記のコマンドで証明書を作成。
Subjectが少し変わっている。
1 | New-SelfSignedCertificate -Type Custom ` |
Exportを実行。
1 | Export-Certificate -Cert cert:\currentuser\my\DF3FBD2431C2418391BA8AD0F999B43C479E64ED ` |
次に下記を実行すると…
1 | > "C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\signtool.exe" sign /fd sha256 ^ |
エラーになってしまう。
エラーの原因について
エラーコードがわかりづらく、署名エラーのトラブルはイベントビューアから実行する。
アプリ パッケージ署名エラーのトラブルシューティング
イベントビューアの イベント ビューアー (ローカル) > アプリケーションとサービス ログ > Microsoft > Windows > AppxPackagingOM > Microsoft-Windows-AppxPackaging/Operational
を見ると、
のように、発行元が変わったことで署名できなかったことが通知されている。
署名に使う証明書は変更できないので、再署名対象のパッケージに手を加える。
*.msix の書き換え
手順としては
- *.msix をzipとしてフォルダに展開
- AppxManifest.xml の中の
Publisher
を新しい証明書のSubject
と同じ内容に書き換える - 書き換えた後のフォルダをパッケージ
になる。
AppxManifest.xml の修正
AppxManifest.xml
は
1 | - <Identity Name="f5474d04-dc34-46ff-8ce2-2b1bee87a545" Publisher="CN=Contoso Software, O=Contoso Corporation, C=US" Version="1.0.0.0" ProcessorArchitecture="arm"/> |
になる感じ。
新しい *.msix の作成
公式に MakeAppx
というコマンドが用意されているのでそれを使う。
下記のような感じで、展開して編集した msix のフォルダを再度 msix にパッケージする。
1 | $ "C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\makeappx.exe" pack /d Demo_1.0.0.0_x64_Debug ^ |
あとは同様の手順で再署名するだけである。