web-dev-qa-db-ja.com

LinuxベースのディストリビューションでWindowsアプリケーションに署名する

私は、顧客がダウンロードする前にこのアプリケーションにいくつかのオプションを設定できるアプリケーションとWebサイトを用意しました。設定はファイルの最後にバイナリ形式で保存され(追加)、編集されたファイルがエンドユーザーに送信されます。問題は、ファイルの「内容」を変更するとファイルの署名が壊れることです。この変更されたファイルをコマンドラインツールで再署名する機会はありますか? MicrosoftのSignToolを使おうとしましたが、Linuxでは正しく動作しません。

24
Tomasz Banasiak

実際には 非常に簡単ですMonoのsigntoolを使用して実行します。トリッキーな部分(リンクされたMozillaの記事でより詳細に説明されています)は、WindowsからLinuxに正しい形式で証明書をコピーすることです。

Windows PFX証明書ファイルをPVKおよびSPCファイルに変換する場合、WindowsからLinuxに証明書をコピーするときに1回だけ実行する必要があります。

openssl pkcs12 -in authenticode.pfx -nocerts -nodes -out key.pem
openssl rsa -in key.pem -outform PVK -pvk-strong -out authenticode.pvk
openssl pkcs12 -in authenticode.pfx -nokeys -nodes -out cert.pem
openssl crl2pkcs7 -nocrl -certfile cert.pem -outform DER -out authenticode.spc

実際にexeに署名するのは簡単です。

signcode \
 -spc authenticode.spc \
 -v authenticode.pvk \
 -a sha1 -$ commercial \
 -n My\ Application \
 -i http://www.example.com/ \
 -t http://timestamp.verisign.com/scripts/timstamp.dll \
 -tr 10 \
 MyApp.exe
25

あなたは試すことができます osslsigncode

EXEまたはMSIファイルに署名するには、次の操作を実行できます:

osslsigncode sign -certs <cert-file> -key <der-key-file> \
        -n "Your Application" -i http://www.yourwebsite.com/ \
        -in yourapp.exe -out yourapp-signed.exe

またはPEMまたはPVKキーファイルとパスワードをPEM証明書と一緒に使用している場合:

osslsigncode sign -certs <cert-file> \
        -key <key-file> -pass <key-password> \
        -n "Your Application" -i http://www.yourwebsite.com/ \
        -in yourapp.exe -out yourapp-signed.exe

またはタイムスタンプも追加する場合:

osslsigncode sign -certs <cert-file> -key <key-file> \
        -n "Your Application" -i http://www.yourwebsite.com/ \
        -t http://timestamp.verisign.com/scripts/timstamp.dll \
        -in yourapp.exe -out yourapp-signed.exe

PKCS#12コンテナーに格納されている証明書とキーを使用できます:

osslsigncode sign -pkcs12 <pkcs12-file> -pass <pkcs12-password> \
        -n "Your Application" -i http://www.yourwebsite.com/ \
        -in yourapp.exe -out yourapp-signed.exe

Javaクラスファイルを含むCABファイルに署名するには:

osslsigncode sign -certs <cert-file> -key <key-file> \
        -n "Your Application" -i http://www.yourwebsite.com/ \
        -jp low \
        -in yourapp.cab -out yourapp-signed.cab
35
EFernandes