【问题标题】:Sign a launch4j executable in ant with sign4j and jsign使用 sign4j 和 jsign 在 ant 中签署 launch4j 可执行文件
【发布时间】:2014-04-15 00:32:34
【问题描述】:

我在 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。

【问题讨论】:

    标签: ant sign launch4j


    【解决方案1】:

    我使用下面的 ant 目标来对 jar 文件生成的 exe 进行签名

    <target name="signexe" depends="createExe" description="Signing Exe">
       <exec executable="C:\Tools\Launch4j\sign4j\sign4j.exe">
            <arg line="java -jar C:\3rdParty\jsign\jsign-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>
    

    【讨论】:

      【解决方案2】:

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

      它也适用于其他签名工具,例如 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>
      

      【讨论】:

      • 能否请您逐步解释一下如何签署由launch4j生成的exe文件。我以前从未使用过signj4。谢谢!
      • @Tulsi 阅读Readme.txt。如前所述,您应该使用外部命令对其进行签名(在我的情况下为 jsign)。只需使用完整的 jsign 命令调用 sign4j。以我的(答案中的第一个代码)为例。
      • 嗨,我正在使用带有launch4j maven插件的maven,你能指导如何使用maven launch4j插件来做到这一点
      • 对不起@Mubasher,但我没有这样做,所以我不知道该怎么做。我建议你问自己的问题,肯定会有人知道怎么做。
      猜你喜欢
      • 2021-10-18
      • 2015-01-27
      • 2021-07-12
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 2020-07-15
      • 2013-05-16
      • 2019-10-14
      相关资源
      最近更新 更多