2013-08-30 45 views
20

signtool.exeを使用してバイナリをSHA1およびSHA2にデュアルサインする必要があります。証明書は256ビットのSHA2をサポートしています。signtoolがタイムスタンプ付きのSHA2およびSHA1に失敗する

例:Windowsの8 SDKのSignToolの使用

FDのSHA256 /として

ときSignTool.exeサインを/ /トンhttp://timestamp.verisign.com/scripts/timstamp.dll/F "certificate.pfx"/PのXXXXXXX "ファイル.dll"

SignToolのエラー:SignedCode ::ログイン

(XXXXXXXは、証明書の私達のパスワードです)

は不可解なエラーで失敗します返されたエラー:0x80070057 パラメータが正しくありません。 SignToolのエラー:署名しようとしたときにエラーが発生しました:タイムスタンプなしのファイル.dll

署名は、SHA1またはSHA256作品として個別に署名し、動作しますが、我々は、二重署名する必要があり、タイムスタンプを持っていない想像なしなしあり。

私はsigntool.exeの32ビット版と64ビット版を試してみましたが、Win7とWin8マシンで試してみましたが、コマンドラインオプションで再生してみましたが役に立たなかった。以前誰かがこの問題でヒットしましたか?

答えて

2

てみ使用して

signtool.exe sign /as /fd sha256 /tr http://timestamp.geotrust.com /td sha256 /f certificate.pfx /p XXXXXX file.dll 

/trがRFC3161のタイムスタンプのハッシュが使用する明らかに、/ TDです。

1

私はまた、「-nest」オプション使用している場合しかし、それはosslsigncodeユーティリティで動作し、上記のエラーを取得:

osslsigncode sign -pkcs12 cert1.pfx -h sha1 -t http://timestamp.verisign.com/scripts/timestamp.dll -in original.exe -out intermediate.exe 
osslsigncode sign -pkcs12 cert2.pfx -nest -h sha1 -t http://timestamp.verisign.com/scripts/timestamp.dll -in intermediate.exe -out final.exe 

公式プロジェクトは、Unixのためであるが、しかし、私は自分のアップノックしましたwindows fork

15

私はこの正確なことをやろうとしていて、次のことがトリックを見つけました。このアプローチでは、SHA-256証明書で署名されていないWindows VistaおよびWindows Server 2008でファイルが有効であることを確認するために、SHA-1用とSHA-256用の2つのAuthenticode証明書を使用しますSHA-1アルゴリズムを使用しても:

signtool.exe sign /sha1 SHA1_Thumprint /v /d "FileDescription" /du "CompanyURL" /fd sha1 /tr http://timestamp.comodoca.com/rfc3161 /td sha1 "FileName.dll" 
signtool.exe sign /sha1 SHA256_Thumprint /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll" 

注SHA-1拇印が明示的/sha1スイッチを使用して、各署名段階に指定され、その/asアペンド SHA-256署名するために使用されます。それ以外の場合は、SHA-256シグニチャがSHA-1シグニチャを上書きします。

私がこのプロセスで見つけたもう一つの問題は、DLLとEXEだけがデュアルシグネチャをサポートしていることです。 MSIインストーラはありません。

更新29/12/15

SHA-1/SHA-256の拇印のフォーマットはスペースを含まない40文字の16進数大文字の文字列です。

:例えば:SHA-256証明書とが、SHA-1ハッシュは以下のようなコマンドを使用してMSIファイルに署名する30/12/2015

更新

signtool.exe sign /sha1ABCDEFABCDEF/as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll" 

signtool.exe sign /sha1 SHA256_Thumprint /v /d "FileDescription" /du "CompanyURL" /t http://timestamp.comodoca.com/authenticode "FileName.msi" 
+0

ため、この平均を行い、 1つは2つの異なる証明書を購入する必要がありますか?またはコピーして名前を変更するには十分ですか? –

+1

はい、残念ながら(誰もが分かっていない限り)残念です。 SHA-1署名を生成するために使用されたSHA-256証明書をWindows Server 2008で有効とするために取得できませんでした。 –

+1

拇印の*形式*で更新できますか? certmgr.mscから文字列をコピーするだけでは機能しません。 – EricLaw

2

martin_costelloの回答に加えて、XPとVistaはRFCタイムスタンプをサポートしていません。 sha1シグネチャには/ tオプションを使用する必要があります。

signtool.exe sign /sha1 SHA1_Thumprint /v /d "FileDescription" /du "CompanyURL" /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "FileName.dll" 
signtool.exe sign /sha1 SHA256_Thumprint /as /v /d "FileDescription" /du "CompanyURL" /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 "FileName.dll" 
10

私はそれが少し古いことを知っていますが、私はこのスレッドに着手しました。

あなたはSHA1で最初に署名した場合には動作しますし、その後、SHA256で:

signtool.exe sign /f cert_file.pfx /t http://timestamp.comodoca.com/authenticode /p cert_password 
signtool.exe sign /f cert_file.pfx /as /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 /p cert_password 

これは、両方の署名で同じ証明書を使用して働きました。 Windows 10 SDKのsigntoolを使用しましたが、以前のバージョンで動作するかどうかはわかりません。

+2

ありがとう、これは助け!これは、私がこの順序でそれを行った限り、signtool Windows 8.1 SDKを使用して私とMISで働いていました。 MSIはWindows 2008で信頼されています。 –

+0

[This](http://support.ksoftware.net/support/solutions/articles/215805-the-truth-about-sha1-sha-256-and-code-signing-certificates) - )は、 "これを行うには6.3バージョンのSigntoolが必要であることに注意してください。これにはWindows 8.1 SDKが付属しています。 – Legolas

0

私はthis linkにいくつかの素晴らしいポインタがあると思います。その中のいくつかはmartin_costelloの答えで言及されていますが、この記事ではいくつかの詳細を提供しています。具体的には

  • SHA1に最初に署名し、SHA256を/と使用すると、「SHA1ファイルダイジェストを組み込む」が可能です。 Windows 8.1 SDK(またはそれ以降)のsigntool v6.3でのみ動作します。
  • XP SP3より前のWindows版に必要な「完全なSHA1署名」を持つ二重署名には、2つの異なる証明書が必要です。

(私自身はしかしこのすべてをテストしていません。)

4

問題は、実際に方法が簡単です。

問題はタイムスタンプサーバーにあります。

代わりのこの

/t http://timestamp.comodoca.com 

ときSignTool.exeを使用してあなたがSHA1

/tr http://timestamp.comodoca.com /td sha1 

のために、このようにそれを使用する必要があり、SHA256

/tr http://timestamp.comodoca.com/?td=sha256 /td sha256 
関連する問題