管理者アクセスを必要とするソフトウェアをコーディングしています。UAC ダイアログがポップアップすると、デジタル署名されたソフトウェアと署名されていないソフトウェアで異なるポップアップが表示されます。ソフトウェアにデジタル署名すると、ユーザーがソフトウェアをより簡単に信頼できるようになると思います。ソフトウェアにデジタル署名するには何千ドルもかかりますか、それとも無料ですか? 簡単な方法はありますか? Google で検索しましたが、PHP、XML、PDF ファイルに署名する方法しか見つかりません。これは私が求めているものではありません。ソフトウェアの実行可能ファイルに署名する必要があります。
sigtool.exe について何か見ましたか? これは正しい方向ですか? 複雑な .pfx ファイルや Authenticode などはどうですか?
ベストアンサー1
他の回答でも述べられているように、まずコード署名に適した証明書を購入する必要があります。これは数百ドルで済みますが、1000ドルには遠く及びません。私が会社の証明書を更新したとき、グローバルサイン最近、会社が合法かどうかを確認するための調査もありました。登録手続きに携帯電話番号を使用したため、私たちが本物の会社であることを確認するために会社の会計担当者からの手紙が必要でした。
実行可能ファイルに署名するには、MSBuild タスクを使用します。関連する部分の抜粋を以下に示します。
<!--
Installer files that need to be signed.
-->
<ItemGroup>
<InstallerSignedFiles Include="$(BuildRoot)path\to\myinstaller.msi"/>
<InstallerSignedFiles Include="$(BuildRoot)path\to\setup.exe"/>
</ItemGroup>
<Target Name="ReleasePackaging">
<!-- Sign the files we're going to release -->
<SignTool
CertificateStoreName="My"
CertificateSubjectName="MyCompany"
Description="My application description"
TimestampServerUrl="http://timestamp.verisign.com/scripts/timstamp.dll"
TargetFiles="@(InstallerSignedFiles)"
/>
</Target>
上記のように動作させるには、証明書を個人の証明書ストアにインストールする必要があります (CertificateStoreName="My"
上記の例を参照)。Globalsign Web サイトでは、このインストールは証明書のダウンロード プロセスの一部として自動的に行われます。注: 証明書をダウンロードするときに Internet Explorer を使用すると、Windows 証明書ストアに統合されるため便利です。ダウンロード コンピュータの証明書ストアに証明書が保存されたら、pfxファイルとしてエクスポートするそれをビルド マシンに転送し、そこにインポートします。エクスポートする場合は、悪意のある人の手に渡らないように、エクスポートしたファイルをパスワードで保護することをお勧めします。
上記のように SignTool MSBuild タスクを使用すると、現在の Windows ユーザー アカウントに関連付けられている個人ストア ("My") から証明書が読み取られます。つまり、自分の証明書を使用してコードに署名できるユーザーを制御できるということです。これは良いことです。証明書は、信頼できる開発者の個人ストアにのみインポートする必要があります。
証明書の有効期限が切れたときにコードに再署名する必要がないように、コードに署名するときにタイムスタンプ サーバーを使用することをお勧めします。