私は長年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でクラッシュします。
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)をインストールしようとしました。 、しかしそれでも問題は解決しませんでした。
私はついにWindows7でファイルを二重署名するための解決策を見つけました。
秘訣は、Window 8 SDK(not)を使用することです。 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
問題は実際にははるかに単純です。
問題はタイムスタンプサーバーにあります。
これで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
私は読むのが苦手なようです。また、私と同じように、他の人が見つけるのが難しいと感じるかもしれないので、私は自分の質問に答えています。
WindowsはWindows7のsigntool.exeをサポートしなくなったため、SHA-1署名などの古い/廃止された関数は引き続き機能しますが、SHA-256タイムスタンプは問題です。私はMSDNでこれを見つけました:
MSDNからの引用:注SignToolを使用できるのは、Windows8以降またはWindowsServer2012以降でWindowsストアアプリパッケージに署名する場合のみです。 SignToolを使用して、Windows7やWindowsServer 2008R2などのダウンレベルのオペレーティングシステムでアプリパッケージに署名することはできません。
すべてを読みたい場合は、ここを見てください: