Подписать исполняемый файл launch4j в ant с помощью sign4j и jsign


У меня есть приложение в банке, и я заворачиваю его в exe с launch4j, так что пользователю легко запустить его (в windows). У меня есть сертификат, поэтому я подписываю jar (я не знаю, действительно ли это необходимо, потому что он будет завернут в exe), и я хочу подписать exe, но он повреждает исполняемый файл.

Я использую ant, чтобы сделать весь процесс и выглядеть так:

<signjar jar="${jar.location}" alias="${key.alias}" storetype="pkcs12" keystore="${key.file}" storepass="${key.password}" tsaurl="https://timestamp.geotrust.com/tsa" />

<launch4j configFile="launch4j_configuration.xml" fileversion="${version}.0" txtfileversion="${build}" productversion="${version}.0" txtproductversion="${build}" outfile="${exe.location}" jar="${jar.location}" />

<signexe file="${exe.location}" alias="${key.alias}" storetype="pkcs12" keystore="${key.file}" storepass="${key.password}" tsaurl="http://timestamp.verisign.com/scripts/timstamp.dll" />

Я обнаружил, что это потому, что когда вы подписываете exe, он ломает структуру jar или что-то вроде этого. Но я также видел, что внутри папки launch4j находится папка sign4j, которая содержит то, что я считаю программой, которая решает эту проблему.

Теперь моя проблема заключается в том, как используется эта программа? И как я могу интегрировать его в сценарий ant, чтобы подписать exe?

README.txt-файл в папке мне не помогает. Извините, если это так очевидно, но не ясно для меня. Также обратите внимание, что я использую Ubuntu.

1 3

1 ответ:

То, что я нашел, это то, что вы должны выполнить команду sign4j с командой подписания в качестве аргумента. Что-то вроде:

sign4j jsign -s keyfile.p12 -a "(codesign_1091_es_sw_kpsc)" --storepass AVERYGOODPASSWORD --storetype pkcs12 -n MyProgram -u https://www.example.com MyProgram.exe
Итак, чтобы интегрировать его в ant, вам нужно создать задачу exec. Например, что-то вроде:
<exec executable="sign4j">
  <arg line="java -jar jsign-1.2.jar -s ${key.file} -a ${key.alias} --storepass ${key.password} --storetype pkcs12 ${exe.location}"/>
</exec>

Он также работает с другими инструментами подписи, такими как, например, authenticode от Microsoft...

<exec executable="launch4j/sign4j/sign4j.exe">
    <arg line="signtool.exe sign /fd SHA256 /f mycert.pfx /p foobar /t http://timestamp.verisign.com/scripts/timstamp.dll dist\myapp.exe"/>
</exec>