MSIX Packaging Tool を使って、msi ファイルから msix ファイルを作成し、signtool.exe を使って Azure Trusted Signing の署名をするまで。
Azure Trusted Signing
・アカウントを作り、サブスクリプションを登録する(私の場合は、Azure AI OCR を使っていたので、すでに登録済みでした)
・Trusted Signing のリソースを作成
・Trusted Signing の設定を行い、本人確認を行う(Identity validations の Individual に identity を追加)
個人の資格で登録したので、本人確認ページ内のリンクから AU10TIX というサイトへ行き
マインバーカードの両面をカメラで撮影、Authenticator に認証済みIDカードとして収納し
Authenticatorを使って本人確認ができました。
・Entra ID と キーコンテナ は設定してみたのですが、Trusted Signing と連携していない様で(使い方が理解できていないかも)、使わなくても署名できることが分かりましたので、登録しなくても良いです。(キーコンテナでいろいろ試してみて、0.03円課金されました。)
msi から MSIXパッケージを作成する
・Micorsoftの任意のデスクトップ インストーラー (MSI、EXE、ClickOnce、または App-V) から MSIX パッケージを作成するから、MIX Packaging Tool を入手してインストールする
・MSIX Packagign Tool を起動して、サイトを参考に実行する
・署名の基本設定で、「パッケージに署名しない」を選択
・パッケージ情報の画面で
発行元に、Azure trusted signing の Certification subjectを全部入れる。(CN=XXXXXXから始まってC=XXまで)
signtool.exeを使って署名する
・Micorsoftの信頼された署名を使用するように署名統合を設定するの手動セットアップ手順に従って、signToolをインストールする
(以下の操作は PowerShell で行います。PowerShell を起動する前に、ダウンロード・インストールするファイルを格納するフォルダを作っておき、PowerShell を起動後、そのフォルダに cd すると良いと思います)
・nuget.exe をダウンロードする
Invoke-WebRequest -Uri https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -OutFile .\nuget.exe
・nuget.exe を使って Windows SDK ビルド ツール をダウンロードしてインストールします
.\nuget.exe install Microsoft.Windows.SDK.BuildTools -Version 10.0.22621.3233 -x
・nuget.exe を使って、信頼された署名の dlib パッケージをダウンロードする
.\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.53 -x
・Microsoft.Trusted.Signing.Client フォルダの中の metadata.sample.json を見本にして、metadata.json(ファイル名は適当で良い)を作成する
"Endpoint", "CodeSigningAccountName", "CertificateProfileName" の3項目を Azure Trusted Signing の情報からセットする。("CorrelationId"はセットしなくても良い)
・SignTool を使用してファイルに署名する
コマンドラインを起動して
"(SDK のフォルダ)\bin\(バージョン)\x64\signtool.exe" sign /v /debug /fd SHA256 /tr "http://timestamp.acs.microsoft.com" /td SHA256 /dlib (Microsoft.Trusted.Signing.Clien のフォルダ)\x64\Azure.CodeSigning.Dlib.dll" /dmdf "(metadata のフォルダ)\metadata.json" (署名するファイル)
MSIX Packagign Tool のパッケージ情報の発行元に CN=XXXXXX だけセットして、パッケージを作成すると
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024885 / 0x8007000B)
のエラーが出ます。
署名は後からする設定にしているのに、発行元情報だけは必要な様です。
発行元に CN=から始まる Certification subject をすべてセットすると、正常終了するはずです。