【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~

这篇具有很好参考价值的文章主要介绍了【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

jarsigner,# 可执行命令,java,jar,安全,后端,经验分享,bash,开发语言

1️⃣ 概念

jarsigner是Java Development Kit (JDK) 提供的一个命令行工具,用于对JAR文件进行数字签名。它的设计目的是提供身份验证和完整性保护,确保在分发和发布Java应用程序时的安全性。

数字签名是一种用于确认数据的来源和完整性的机制。使用私钥对数据进行签名,并使用公钥进行验证。当用户下载应用程序时,可以使用与应用程序打包时使用的公钥进行验证,以确认应用程序未被篡改且来自可信的源。

jarsigner基于公钥基础设施 (Public Key Infrastructure, PKI) 技术。它使用非对称加密算法(如RSA)生成密钥对,并将私钥用于对JAR文件进行签名,而公钥用于验证签名。

当签名成功后,签名信息被添加到JAR文件的MANIFEST.MF文件中。验证时,使用公钥检查签名和时间戳是否有效。

2️⃣ 优势和缺点

优点:

  • 确保应用程序的完整性:通过校验数字签名,可以验证应用程序没有被篡改;
  • 防止篡改和中间人攻击:数字签名提供了认证机制,防止不被授权的修改或分发应用程序;
  • 增加用户信任度:数字签名是建立与用户之间信任关系的重要方式。

缺点:

  • 增加开发和部署复杂性:使用jarsigner需要额外的步骤来生成和管理密钥库、创建签名、以及进行时间戳等操作。

3️⃣ 使用

3.1 语法

以下是jarsigner命令的基本语法:

// 1、签名
jarsigner [-options] jar-file alias
// 2、验证签名
jarsigner -verify [-options] jar-file [alias ...]

其中,-options 是可选参数, jar-file 是要签名的JAR文件,alias 指定了密钥库中用于签名的别名。将 jarsigner 命令支持的所有可选参数汇总如下表:

参数 说明
-keystore <url> 密钥库位置
-storepass <口令> 用于密钥库完整性的口令
-storetype <类型> 密钥库类型
-keypass <口令> 私有密钥的口令 (如果不同)
-certchain <文件> 替代证书链文件的名称
-sigfile <文件> .SF/.DSA 文件的名称
-signedjar <文件> 已签名的 JAR 文件的名称
-digestalg <算法> 摘要算法的名称
-sigalg <算法> 签名算法的名称
-verify 验证已签名的 JAR 文件
-verbose[:suboptions] 签名/验证时输出详细信息。子选项可以是 all, grouped 或 summary
-certs 输出详细信息和验证时显示证书
-tsa <url> 时间戳颁发机构的位置
-tsacert <别名> 时间戳颁发机构的公共密钥证书
-tsapolicyid <oid> 时间戳颁发机构的 TSAPolicyID
-tsadigestalg <算法> 时间戳请求中的摘要数据的算法
-altsigner <类> 替代的签名机制的类名
-altsignerpath <路径列表> 替代的签名机制的位置
-internalsf 在签名块内包含 .SF 文件
-sectionsonly 不计算整个清单的散列
-protected 密钥库具有受保护验证路径
-providerName <名称> 提供方名称
-providerClass <类> 加密服务提供方的名称
-providerArg <参数>... 主类文件和构造器参数
-strict 将警告视为错误

上面表格汇总了jarsigner的所有可选参数,读者可以根据自己的需求参照表格选择所需参数。下是主要介绍一些常用的可选参数:

  • -keystore <url>:指定密钥库 (Keystore) 文件的路径和名称。密钥库是存储与签名相关的密钥和证书信息的地方。例如,-keystore mykeystore.jks 将使用名为 mykeystore.jks 的密钥库文件进行签名;

  • -storepass <口令>:指定密钥库的密码。需要提供正确的密码才能对密钥库进行访问和执行签名操作。例如,-storepass mypassword 指定密钥库密码为 mypassword

  • -keypass <口令>:指定密钥的密码。当密钥库包含多个密钥时,可以为每个密钥设置不同的密码。例如,-keypass mykeypassword 指定用于签名的密钥密码为 mykeypassword

  • -tsa <url>:指定时间戳服务器的URL。时间戳是对签名进行的附加操作,用于在证书过期后仍然可以验证应用程序。通过提供时间戳服务器的URL,可以在签名中添加时间戳。例如,-tsa http://timestamp.digicert.com 指定了使用 http://timestamp.digicert.com 作为时间戳服务器。

这些是 jarsigner 命令中最常用的可选参数。它们允许指定密钥库的位置、密码以及相关的签名信息和时间戳。使用这些参数,可以根据自己的需求来执行签名操作,并确保应用程序的完整性和安全性。

3.1.1 可选参数:jarsigner -keystore < url>

jarsigner -keystore <url> 命令中使用 <url> 代表密钥库文件的路径和名称。

以下示例演示了命令的使用和作用:

jarsigner -keystore mykeystore.jks MyApp.jar

在这个命令中,-keystore 参数指定了密钥库文件的名称 mykeystore.jks。成功执行命令后,MyApp.jar 文件将使用 mykeystore.jks 密钥库中的默认别名来进行签名。此过程将确保应用程序的完整性和身份验证。

需要注意,在实际使用中,根据情况提供自己的密钥库文件并相应地更换 -keystore 参数值。可以使用 Java 自带的 keytool 工具来生成和管理密钥库,其中包含有关密钥和证书的信息。

通过使用 jarsigner -keystore <url> 命令,即可以指定要用于签名的密钥库文件,在分发和发布 Java 应用程序时提供身份验证和完整性保护。

3.1.2 可选参数:jarsigner -storepass <口令>

jarsigner -storepass <口令> 命令中使用 <口令> 代表密钥库的密码,即jarsigner -storepass <password>

通过使用 jarsigner -storepass <password> 命令,你可以在签名过程中提供密钥库的密码,以便 jarsigner 可以正确访问密钥库并完成签名操作。

以下是示例命令的使用和作用:

jarsigner -storepass mypassword MyApp.jar

在这个命令中,-storepass 参数指定了密钥库的密码 mypassword。成功执行命令后,MyApp.jar 文件将使用指定的密钥库进行签名,而不会提示输入密钥库密码。

需要确保提供的密码是与密钥库文件匹配的有效密码。如果密码不正确,那么 jarsigner 将无法访问密钥库并完成签名操作。

3.1.3 可选参数:jarsigner -keypass <口令>

jarsigner -keypass <password> 命令中使用 <password> 代表密钥的密码。通过使用 jarsigner -keypass <password> 命令,可以在签名过程中提供密钥的密码,以便 jarsigner 可以正确使用密钥对 JAR 文件进行签名。

以下是示例命令的使用和作用:

jarsigner -keypass mykeypassword MyApp.jar

在这个命令中使用 -keypass 参数指定了密钥的密码为 mykeypassword。成功执行命令后,MyApp.jar 文件将使用指定的密钥进行签名,而不会提示输入密钥密码。

需要注意确保提供的密码是与密钥匹配的有效密码。如果密码不正确,那么 jarsigner 将无法访问密钥并完成签名操作。

3.1.4 可选参数:jarsigner -tsa < url>

jarsigner -tsa <URL> 命令中使用 <URL> 代表时间戳服务器的URL。

在应用程序开发中,为了确保签名的持久性和验证的可靠性,可以将时间戳添加到签名中。时间戳是一个由权威机构提供的记录签名时间的标记,可以用来验证签名是否在证书过期之前完成。

以下是示例命令的使用和作用:

jarsigner -tsa http://timestamp.digicert.com MyApp.jar

在这个命令中,-tsa 参数指定了时间戳服务器的URL http://timestamp.digicert.com。成功执行命令后,MyApp.jar 文件将使用指定的时间戳服务器为签名添加时间戳。

通过为签名添加时间戳,可以确保签名长时间有效,在证书过期后仍然可以验证应用程序的完整性。时间戳服务器会为签名生成一个时间戳,作为证明签名是在一定时间内完成的证据。

通过使用 jarsigner -tsa <URL> 命令,你可以在签名过程中指定时间戳服务器的URL,并将时间戳添加到签名中,以增强签名的可靠性和验证能力。

3.1.5 可选参数:jarsigner -verify

jarsigner -verify [-options] jar-file [alias ...] 命令用于验证已签名的 JAR 文件的完整性和有效性,并提供了一些可选的配置选项。

以下是示例命令的使用和作用:

jarsigner -verify [-certs] [-verbose] MyApp.jar

在这个命令中,-verify 参数表示对指定的 JAR 文件进行验证。[-certs][-verbose] 是可选的选项,它们提供了进一步的验证配置和输出。

-certs 选项会显示详细的证书信息,包括签名者的证书链。-verbose 选项会显示更详细的验证信息,包括每个文件的签名状态。

执行上述命令后,jarsigner 工具将会检查 JAR 文件是否已被签名,并验证签名的完整性和有效性。根据提供的选项,它还会显示证书信息和详细的验证输出。

通过使用 jarsigner -verify [-options] jar-file [alias ...] 命令,可以根据需要配置验证过程,并确保签名的完整性和有效性。这是验证应用程序是否受信任以及是否未经篡改的重要步骤。

4️⃣ 应用场景

  • 发布Java应用程序:在将Java应用程序分发给用户之前,对JAR文件进行签名以确保应用程序的完整性,并增加用户信任度。
  • 下载校验:在下载Java应用程序时,可以使用jarsigner验证文件的数字签名,从而确认文件来自可信源。

5️⃣ 使用技巧

  1. 生成密钥库:使用Java自带的keytool工具生成密钥库,其中包含需要的密钥对。可以指定密码和其他选项;
  2. 签名JAR文件:使用jarsigner命令对JAR文件进行签名,提供密钥库、别名、密码等必要参数;
  3. 验证签名:可以使用jarsigner来验证已签名的JAR文件,以确认其完整性和信任;
  4. 添加时间戳:通过指定时间戳服务器的URL,可以为签名添加时间戳,确保应用程序在证书过期后仍然有效。

🌾 总结

jarsigner命令是Java开发工具中用于对JAR文件进行签名的重要工具之一。它通过数字签名实现身份验证和保证应用程序的完整性,提供了应用程序发布和分发的安全性。但它也引入了额外的复杂性和一些操作步骤。通过理解和正确使用jarsigner,可以提高Java应用程序的安全性和用户的信任度。

总的来说,jarsigner为Java应用程序提供了一种有效的方式来验证应用程序的来源和完整性,帮助建立用户和开发者之间的信任关系。

文章来源地址https://www.toymoban.com/news/detail-548140.html

jarsigner,# 可执行命令,java,jar,安全,后端,经验分享,bash,开发语言

到了这里,关于【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA项目通过IDEA如何构建可执行JAR

    开发JAVA工程代码(main方法启动)如何构建出可以通过java -jar命令直接执行的jar?如果工程中依赖其他jar又如何处理?本文即针对以上两点通过IDEA开发工具来做一个简单的分析和尝试,测试如下四种方法,如有瑕疵请轻喷。 如下所示通过IDEA创建一个本地JAVA工程,此处工程名J

    2024年02月04日
    浏览(48)
  • Java通过OpenSSH(ssh2/ScpClient)远程连接Windows10实现传输文件、解压缩包、执行命令等操作

    远程机器A:Windows 10 专业版 22H2 本地环境:jdk8 设置 -- 应用 -- 应用和功能 -- 可选功能 -- 添加功能 由于我已经安装,在以安装功能里面即可找到。未安装的用户选择添加功能添加即可 启动 OpenSSH SSH Server 服务 输入ssh 出现如下提示即安装成功 编写 bat 脚本,在远程机器上面静

    2024年02月14日
    浏览(71)
  • 解决IntelliJ IDEA执行maven打包,执行java -jar命令提示jar中没有主清单属性

    IDEA执行 mvn clean package -DskipTest=true 命令或者借助工具的 Maven菜单 进行打包操作,然后执行 java -jar app.jar 命令后,提示jar中没有主清单属性 这个错误通常是由于生成的JAR文件缺少一个主清单属性引起的。在使用 java -jar 命令运行JAR文件时,JVM需要查找JAR文件中包含 Main-Class 属

    2024年02月05日
    浏览(44)
  • Java -jar参数详解:掌握Java可执行JAR文件的运行技巧

    作为一种常用的开发语言,Java经常使用可执行的JAR(Java Archive)文件来打包和分发应用程序。使用java -jar命令运行JAR文件是一种方便快捷的方式。本文将详细介绍java -jar命令的各种参数,帮助您充分利用这个功能。 一、简介 java -jar命令用于运行可执行的JAR文件。它会自动查

    2024年02月16日
    浏览(32)
  • 【Java】java | 将可运行jar打包成exe可执行文件

            1、javafx桌面程序,但又不想安装jre环境         2、需要将可执行jar打包成exe         3、使用工具exe4j 1、下载exe4j 2、安装 说明1: 在d盘建个exe4j的文件夹 说明2: 建个output文件jar,存放生成后的exe 3、运行 4、目录介绍 Welcome: 工具介绍;Open可以打开历史的

    2024年02月03日
    浏览(32)
  • Linux 下通过 java 命令启动 jar 包的几种常见方式

    Linux 下通过 java 命令启动 jar 包的几种常见方式 一、后台启动jar包命令 方法一:直接启动 jar 包服务 方法二:后台启动 jar 包服务 方法三:后台不挂断启动 方式四:指定日志输出的启动 方式五:指定配置文件启动 方式六:指定配置文件,使用系统默认的log配置,不另行指定

    2024年02月13日
    浏览(31)
  • Java:Java程序通过执行系统命令调用Python脚本

    本文实现功能:Java程序调用Python脚本 直接执行 参考视频 JAVA开发必会小技巧8——用代码调用系统指令

    2024年02月14日
    浏览(46)
  • jar 命令启动java 指定配置文件路径 jar如何启动

    一、各种启动方式 1.java -jar # 例子 java -jar test.jar 1. 2. 这是最简单的启动方式,同时弊端也是很多的。 弊端1:exit 退出终端会导致java进程中断。 弊端2:ctrl+c 退出启动展示页会导致java进程中断。 弊端3:直接关闭终端会导致java进程中断(启动时和启动完关闭都会导致java进程终

    2024年02月04日
    浏览(36)
  • 使用java内置工具jar手动创建xxx.jar文件

    平时我们一般都是在IDE工具中使用插件打包JAVA项目为 XXX.jar文件,  其实这个工作我们手动也可以完成, 也非常简单, 使用JDK自带的jar命令行工具即可. jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ... 创建 jar:     jar cf jar-file input-file(s) 查看 jar 文件内容:    ja

    2024年01月18日
    浏览(31)
  • Android 应用平台加固之后操作(apk重签名「zipalign」「apksigner」「jarsigner」) 操作环境:MacOS

    说一个恐怖的事情: 现在的Android签名方案已经有v1,v2,v3,v4了 ,v3支持多个证书,v4为增量签名。具体详情请看 官方文档 。我们目前还是以v1,v2为主。 当然,这是题外话,当前这篇文章的主题是:Android 平台加固之后的重签名姿势。我们在(腾讯加固/360加固/爱加密)等

    2024年02月01日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包