在ant中使用sign4j和jsign签署一个launch4j可执行文件



我在Jar中有一个应用程序,我用launch4j将其包装在exe中,因此用户很容易启动它(在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。

我发现必须使用签名命令作为参数来执行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…

<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 distmyapp.exe"/>
</exec>

我使用ant target对从jar文件生成的exe进行签名

<target name="signexe" depends="createExe" description="Signing Exe">
   <exec executable="C:ToolsLaunch4jsign4jsign4j.exe">
        <arg line="java -jar C:3rdPartyjsignjsign-3.1.jar
        --keystore ${keystore.location} --alias ${key.alias} --storepass ${store.password}
        --name 'Application Name'
        --tsaurl http://timestamp.verisign.com/scripts/timstamp.dll
         AppLauncher.exe"/>
    </exec>
</target>

这个问题可以通过在launch4j配置中设置主类来解决:

<classPath>
  <mainClass>org.acme.Main</mainClass>
</classPath>

有关更多信息,请参阅相关的Jsign问题:https://github.com/ebourg/jsign/issues/80

相关内容

  • 没有找到相关文章

最新更新