Подписание приложения Windows на дистрибутивах на базе Linux

Я подготовил приложение и веб-сайт, где клиент может установить несколько параметров для этого приложения, прежде чем он загрузит его. Настройки сохраняются в двоичном формате в конце файла (добавляются), а затем отредактированный файл отправляется конечному пользователю. Проблема заключается в том, что изменение "содержимого" файла приведет к слому сигнатуры файла - есть ли возможность переписать этот измененный файл с любыми инструментами командной строки? Я пытался использовать Microsoft SignTool, но он не работает должным образом в Linux.

Ответы

Ответ 1

На самом деле достаточно прямо, чтобы использовать Mono signtool; сложная часть (более подробно описанная в связанной статье Mozilla) копирует сертификат в правильном формате из Windows в Linux.

Преобразование файла сертификата Windows PFX в файлы PVK и SPC необходимо выполнять только один раз при копировании сертификата из Windows в Linux;

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

Ответ 2

Вы можете попробовать 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

Чтобы подписать CAB файл, содержащий файлы классов Java:

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