使用JAR签名进行代码签名

发布时间:2022/11/23 13:20:10 打印 字号:

JavaArchive(JAR)包格式可用于打包Java应用程序和库。

签名的JAR文件可以选择包含来自TSA的时间戳响应,使用RFC#3161格式

添加JAR签名者添加JAR签名者的链接

SignServer中的JAR签名器称为JArchiveSigner。

要配置JArchiveSigner,请按照以下步骤操作并使用名为jarchive_signer.properties的模板:

1、转到SignServerAdminWebWorkers页面并单击添加以添加新的工作人员。

2、在AddWorker/LoadConfiguration页面上,选择方法FromTemplate。

3、在LoadFromTemplate列表菜单中,选择jarchive_signer.properties并单击Next。

4、单击Apply并选择工作人员名称JArchiveSigner。

5、单击“配置”选项卡并对以下项进行适当的调整:

  • 名称:指定一个名称。

  • CRYPTOTOKEN:如果使用SignServerEnterprise,这应该与在SignServer软件安装部分中配置的加密令牌的名称相匹配。如果您在设备上,则此加密令牌是为您创建的,名称为HSMCryptoToken10。如果使用SignServerCloud,实例会提供CryptoTokenP12,其中包含您需要的所有示例密钥和证书,您可以继续最后一步并确保您的签名者处于ACTIVE状态。

6、通过单击StatusSummary选项卡,然后单击RenewKey为签名者生成新的密钥对。

7、选择一个密钥算法,例如RSA和一个密钥规范,例如2048,然后单击Generate。

8、通过单击生成CSR为新密钥对创建证书签名请求(CSR)。

9、选择SHA256withRSA等签名算法,并为新证书指定主题DN(名称),例如CN=MSAuthCodeSignerTest,O=MyCompany,C=SE,然后单击Generate。

10、单击下载并保存CSR文件。

11、将CSR文件带到您的证书颁发机构以获取证书和CA证书作为回报。在生产系统中安装证书之前,请确保检查签名者的授权,因为一旦安装了证书,签名者将完全正常运行并准备好接收请求。

12、单击安装证书并浏览证书文件。首先提供签署者证书,然后依次颁发CA证书。单击添加以列出链中的证书。

13、按正确顺序添加所有证书后,单击安装。

14、安装证书后,签名者应处于ACTIVE状态。如果不是,请检查其“状态摘要”页面的顶部是否有任何错误。


使用JArchive签名器

要提交要签名的JAR文件,请使用以下可用接口之一:

使用客户端Web提交和签名文件

下面描述了如何使用Web浏览器中的SignServer客户端Web表单使用JArchive签名器提交和签署JAR。

要下载示例JAR,然后使用客户端网页提交文件并对其进行签名,请执行以下操作:

  1. 下载helloworld.jar测试 JAR 签名。

  2. 转到 SignServer 客户端 Web通用页面。

  3. 在页面上向下滚动到文件上传的通用签名或验证部分,并在工作人员姓名字段中指定 JArchiveSigner 。

  4. 单击选择文件,选择 helloworld.jar,然后单击提交

JARsigning.png (1367×1170)

系统将提示您保存已签名的JAR文件helloworld.jar。

使用客户端CLI提交和签名文件

要使用SignServerClientCLISignClient提交JAR文件进行签名,请使用以下命令向工作人员发送请求:

bin/signclient signdocument -workername JArchiveSigner -infile helloworld.jar -outfile helloworldsigned.jar

workernameSignServer服务器中工作人员的名称在哪里,要infile签名的未签名输入文件的路径,以及outfile签名版本将写入的文件名。

验证签名的JAR文件验证签名JAR文件的链接

Javajarsigner工具可用于验证JAR文件的签名和证书。该工具在Java开发工具包(JDK)中可用。

安装JDK后,打开命令提示符,并使用签名文件的路径执行命令(作为User):

Jarsigner验证示例

jarsigner -verify -strict MyJAR-signed.jar

要获取其他信息以及证书,还请指定选项-verbose和-certs.


JArchive 签名者选项链接到 JArchive 签名者选项

为 JArchive Signer 配置的最相关的属性是:

工人财产

描述

签名算法

指定用于签名的算法。

示例:SHA256withRSA

消化算法

文件条目和清单摘要的算法。

示例:SHA-256

保留签名

如果应保留现有签名文件,则为真。

替换签名

如果应覆盖具有相同名称的现有签名并且不会因错误而失败,则为真。

SIGNATURE_NAME_TYPE

要使用的签名名称的类型。对于VALUE类型,名称取自SIGNATURE_NAME_VALUE属性。对于KEYALIAS类型,名称取自用于签署响应的密钥的密钥别名。
示例:KEYALIAS

邮编

如果每个文件条目的数据开始的偏移量应对齐到 4 个字节,则为真。将此用于 Android 应用程序。

TSA_工人

同一 SignServer 中的工作人员 ID 或内部时间戳签名者的名称(如果应使用时间戳)以及 SignServer 中的时间戳签名者。
示例:TimeStampSigner1

TSA_URL

如果应使用时间戳并与外部 TSA 一起使用,则为外部时间戳授权机构的 URL。
例子:https://tsa.example.com/authenticode

对于所有可用的属性,请参阅 SignServer 文档JArchive Signer部分