web-dev-qa-db-ja.com

SigntoolはWindows7でSHA256署名を行うことができません

私は長年SHA1署名を使用していますが、2016年以降、Windowsは開発者にSHA256の使用を強制しています。

WindowsによるAuthenticodeコード署名とタイムスタンプの適用

Windows 7 SDK signtoolを使用することにより、SHA-256に署名する機能は「不明なコマンド」であるため、このsigntoolはsigntoolとして廃止され、今後は使用しないでください。

SHA256で署名するために、Windows 8.1 SDKをダウンロードして、新しい関数(/ fdなど)を取得したsigntool.exeを取得しました。 BATファイルとsigntoolはWindows8と10で動作するので、動作することはわかっていますが、ファイルにタイムスタンプを付けようとするとWindows7でクラッシュします。

Signing fails

Batファイルを使用してファイルに署名します。これは次のようになります(変数、フルパス、会社名、パスワードが表示されないようにBATファイルを編集しました)。

Path\signtool.exe sign /f "Path\Certificate.p12" /fd sha256 /p *password* /du "URL" /tr "timestampServer?td=sha256" /td sha256 /d "Product name" "Filename"

一部の機能をサポートする適切なSDKがないようですが、Windows7でこれをセットアップする方法に関する情報がインターネット上に見つかりません。MSVisualC++ 2015再頒布可能パッケージ(x64)をインストールしようとしました。 、しかしそれでも問題は解決しませんでした。

5
Frank Jelstrup

私はついにWindows7でファイルを二重署名するための解決策を見つけました。

秘訣は、Window 8 SDKnot)を使用することです。 8.1または10)!私はこのダウンロードを使用しました: https://developer.Microsoft.com/windows/downloads/windows-8-sdk

Windows 7 x64では、必ずx64バイナリ(...\8.0\bin\x64\signtool.exe

ボーナスとして、これが私が作成した快適なバッチスクリプトです。それをdoublesign.batとして保存し、署名したいファイルをそのbatファイルにドラッグするだけです。

@ECHO OFF

set signtool="C:\path to signtool\signtool.exe"
set certfile="C:\path to certificate\cert.p12"
set certpass="Password"
set company="Optional"

echo Signing with SHA-1
%signtool% sign /f %certfile% /p %certpass% /t http://timestamp.comodoca.com/authenticode %1
timeout /T 3
echo. & echo Signing with SHA-256
%signtool% sign /f %certfile% /p %certpass% /as /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 %1

@PAUSE
3
CodeX

問題は実際にははるかに単純です。

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

これでsigntool.exeを使用する代わりに

/t http://timestamp.comodoca.com 

SHA1ではこのように使用する必要があります

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

そしてSHA256の場合

/tr http://timestamp.comodoca.com/?td=sha256 /td sha256
1
Daniel Georgiev

私は読むのが苦手なようです。また、私と同じように、他の人が見つけるのが難しいと感じるかもしれないので、私は自分の質問に答えています。

WindowsはWindows7のsigntool.exeをサポートしなくなったため、SHA-1署名などの古い/廃止された関数は引き続き機能しますが、SHA-256タイムスタンプは問題です。私はMSDNでこれを見つけました:

MSDNからの引用:注SignToolを使用できるのは、Windows8以降またはWindowsServer2012以降でWindowsストアアプリパッケージに署名する場合のみです。 SignToolを使用して、Windows7やWindowsServer 2008R2などのダウンレベルのオペレーティングシステムでアプリパッケージに署名することはできません。

すべてを読みたい場合は、ここを見てください:

SignToolを使用してアプリパッケージに署名する方法

0
Frank Jelstrup