web-dev-qa-db-ja.com

実行可能ファイルにデジタル署名するにはどうすればよいですか?

管理アクセスが必要なソフトウェアをコーディングしています。 UACダイアログがポップアップすると、デジタル署名されたソフトウェアと署名されていないソフトウェアのポップアップが異なります。私のソフトウェアにデジタル署名することで、ユーザーは私のソフトウェアをより簡単に信頼できるようになると思います。ソフトウェアにデジタル署名するのに何千ドルもかかりますか、それとも無料ですか?それを行う簡単な方法はありますか? Googleを検索したところ、PHP、XML、およびPDFファイルに署名する方法しかありません。これは私が望むものではありません。ソフトウェアの実行可能ファイルに署名する必要があります。

Sigtool.exeについて何か見ただけですか?これは正しい方向ですか?それらの複雑な.pfxファイルとAuthenticodeはどうですか?

24
Rudi

他の回答で述べたように、最初にコード署名に適した証明書を購入する必要があります。これには数百ドルの費用がかかりますが、千ドル近くはありません。最近、会社の証明書を Globalsign で更新したとき、会社が合法であるかどうかを確認するための調査もありました-登録プロセスに携帯電話番号を使用したため、会社の会計士からの手紙が必要でした私たちが本物のビジネスであることを確認してください。

実行可能ファイルに署名するには、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ファイルとしてエクスポート 、ビルドマシンに転送し、そこにインポートできます。エクスポートする場合は、悪用された場合に備えて、エクスポートしたファイルをパスワードで保護することをお勧めします。

上記のようにSignToolMSBuildタスクを使用すると、現在のWindowsユーザーアカウントに関連付けられているパーソナルストア(「My」)から証明書が読み取られます。これは、証明書を使用してコードに署名できるユーザーを制御できることを意味します。これは良いことです。証明書は、信頼できる開発者の個人ストアにのみインポートする必要があります。

コードに署名するときにタイムスタンプサーバーを使用することをお勧めします。これにより、証明書の有効期限が切れたときにコードに再署名する必要がなくなります。

19
Rich Tebb

Microsoftのコード署名コマンドラインユーティリティが必要です。

その後:

signtool.exe sign /v /f "MyCertificate.pfx" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"

または交互に

signcode.exe -a "sha1" -spc "MySoftwarePublishingCertificate.spc" -v "MyPrivateKeyFile.pvk" -t "http://timestamp.verisign.com/scripts/timstamp.dll" "MyApp.exe"
11
Ian Boyd

ここでは誰もマーケティングしていませんが、 VeriSign を試してください。彼らは コード署名 あなたが探しているものを提供します。

4
Julius A
1
zneak