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

article/2025/9/19 14:40:56

Java可执行命令之jarsigner

  • 1️⃣ 概念
  • 2️⃣ 优势和缺点
  • 3️⃣ 使用
    • 3.1 语法
      • 3.1.1 可选参数:jarsigner -keystore < url>
      • 3.1.2 可选参数:jarsigner -storepass <口令>
      • 3.1.3 可选参数:jarsigner -keypass <口令>
      • 3.1.4 可选参数:jarsigner -tsa < url>
      • 3.1.5 可选参数:jarsigner -verify
  • 4️⃣ 应用场景
  • 5️⃣ 使用技巧
  • 🌾 总结

在这里插入图片描述

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应用程序提供了一种有效的方式来验证应用程序的来源和完整性,帮助建立用户和开发者之间的信任关系。


http://chatgpt.dhexx.cn/article/me7CsRAy.shtml

相关文章

您的凭据不工作,请输入新凭据

转载自 http://m.blog.csdn.net/article/details?id47706021 今天上班同事说远程桌面无法使用&#xff0c;然后VNC连接&#xff0c;查看情况&#xff0c;密码是正确的&#xff0c;防火墙也关了&#xff0c;百思不得其解。 上网查询问题&#xff0c;找到一个解决办法&#xff0…

远程桌面连接提示“您的凭据不工作”

本次操作的是企图远程别人的电脑配置&#xff0c;而非被远程的电脑 在域环境中&#xff0c;如果使用Vista及以上的操作系统&#xff0c;默认情况下&#xff0c;在连接到远程计算机时无法保存凭据。 当我们使用远程桌面连接时&#xff0c;即使已经勾选了“记住我的凭证”。 但是…

凭据不工作

最悲催的事情是什么&#xff1f;那就是你可以远程别人的电脑&#xff0c;但是别人不能远程自己的电脑&#xff01; 背景&#xff1a; 换了个win8.1的系统&#xff0c;刚开始可以远程上,过了几天,电脑突然不能远程了,让我很是郁闷呀. 于是在网上查了好多资料,看看他到底是什么…

win10远程桌面连接凭据怎么设置_win10远程桌面连接提示您的凭据不工作修复方法...

在win10系统中&#xff0c;使用远程桌面可以不在用户电脑前就可以帮助他人&#xff0c;轻松的解决一些自己不在场的难题&#xff0c;然而近日有用户却发现自己的win10系统在进行远程桌面连接时出现提示您的凭据不工作的问题&#xff0c;那么对此有什么方法能够解决呢&#xff1…

计算机远程连接提示凭证不工作,连接远程桌面提示您的凭证不工作怎么办

安装win10正式版&#xff0c;工作需要连接远程桌面&#xff0c;但是连接过程中&#xff0c;提示您的凭证不工作。原有保存的远程帐号密码无法使用&#xff0c;导致远程登录系统失败&#xff0c;连接远程桌面提示您的凭证不工作的解决方法其实很简单&#xff0c;下面由学习啦小编…

远程连接不成功,提示您的凭据不工作的解决办法

1&#xff0c;输入WindowsR键 进入命令行输入模式&#xff0c;在弹出的运行框里输入【gpedit.msc】点击确定&#xff0c;打开本地组策略编辑器 2&#xff0c;然后依次点击【计算机配置】&#xff0c;【管理模板】&#xff0c;【系统】&#xff0c;【凭据分配】。双击打开点击右…

远程桌面连接提示“您的凭据不工作” 解决方案!求解

最佳的方案是&#xff1a; 最好的解决方案&#xff1a; 最重要一点, 主机上要允许用户以非guest身份登录: 主机上运行gpedit.msc, 计算机配置/windows设置/安全设置/本地策略/安全选项/ 网络访问:本地帐户的共享和安全模型 选择: 经典-对本地用户进行身份验证,不改变其本来…

【目标检测】(9) 改进PANet特征提取金字塔,附Tensorflow完整代码

各位同学好&#xff0c;今天和大家分享一下如何使用 注意力机制 和 深度可分离卷积 优化 YOLOV4 的 PANet 特征金字塔。看本篇博客之前&#xff0c;建议大家先看以下几篇&#xff1a; YOLOV4主干网络&#xff1a;https://blog.csdn.net/dgvv4/article/details/123818580 混合…

深度学习_图像分割_PANet论文详解

PANet论链接 PANet介绍 这篇文章提出的Path Aggregation Network (PANet)整体上可以看做是在Mask RCNN上做多处改进&#xff0c;充分利用了特征融合&#xff1a; 引入bottom-up path augmentation结构&#xff0c;充分利用网络浅特征进行分割。引入adaptive feature pooling…

【小样本分割 2020 ICCV】PANet

文章目录 【小样本分割 2020 ICCV】PANet1. 简介2. 网络2.1 整体架构2.2 原型学习2.3 非参数度量学习2.4 原型对齐正则化 3. 代码3.1 backbone3.2 模型代码 【小样本分割 2020 ICCV】PANet 论文题目&#xff1a;PANet: Few-Shot Image Semantic Segmentation with Prototype Al…

TPanel

TPanel位于Standard组件面板上&#xff0c;也是常用的一种容器控件。面板的一个优点就是放在面板上的组件称为面板的一部分&#xff0c;因此它们与面板一起移动。这在设计阶段很有用。 Panel组件的大部分功能在于其Align属性。例如&#xff0c;想显示标题在窗体上端&#xff0c…

[Neck] 空间金字塔池化【池化策略】(Space Pyramid Pool, SPP)模块和路径聚合网络【增强】(Path Aggregation Network, PANet)的结构

文章目录 背景yolo v4 中的空间金字塔池化(Space Pyramid Pool, SPP)模块和路径聚合网络(Path Aggregation Network, PANet)的结构SPP 模块Abstract IntroductionDeep Networks with Spatial Paramid PoolingTraining the NetworkSPP-Net for Image ClassificationSPP-Net for …

芒果改进YOLOv7系列:首发改进特征融合网络BiFPN结构,融合更多有效特征

💡统一使用 YOLOv7 代码框架,结合不同模块来构建不同的YOLO目标检测模型。文章目录 一、BiFPN论文理论部分代码部分YOLOv7+BiFPN在这篇文章中,将BiFPN结构加入到 YOLOv7 结构中 一、BiFPN论文理论部分 EfficientDet: Scalable and Efficient Object Detection BiFPN与P…

算法笔记(六)多尺度特征融合之FPN/PANet

前言 最近论文快deadline了&#xff0c;一直没空更新…今天复习一下多尺度特征融合的常用操作。 1. FPN 特征金字塔 论文&#xff1a;feature pyramid networks for object detection 论文链接 设计思路&#xff1a; 底层的特征语义信息比较少&#xff0c;但是目标位置准确…

PANet:YOLOv4中的路径聚合网络

点击上方“AI公园”&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶” 作者&#xff1a;Miracle R 编译&#xff1a;ronghuaiyang 导读 非常简单高效的特征金字塔模块。 是最重要的计算机视觉过程之一&#xff0c;它将图像分割成更小的、多个片段&#xff0c;这样的…

PANet 学习笔记

PANet是18年的一篇CVPR&#xff0c;作者来自港中文&#xff0c;北大&#xff0c;商汤与腾讯优图&#xff0c;PANET可看作Mask-RCNN&#xff0c;是在Mask-RCNN基础上做的几处改进。 Introduce 解决问题&#xff1a; 当前实例分割最佳模型Mask-RCNN的信息传播还不够充分&#…

[小样本图像分割]PANet: Few-Shot Image Semantic Segmentation with Prototype Alignment

PANet:基于原型对齐的Few Shot图像语义分割&#xff08;ICCV19&#xff09; 论文地址 开源代码 摘要 本文从度量学习的角度来解决Few Shot Segmentation问题&#xff0c;提出一种新的原型对齐网络来更好地利用支持集信息。PANet从嵌入空间内的一些支持图像中学习特定类的原型…

PANet:基于金字塔注意力网络的图像超分辨率重建(Pytorch实现)

PANet&#xff1a;基于金字塔注意力网络的图像超分辨率重建 [!] 为了提高代码的可读性&#xff0c;本文模型的具体实现与原文具有一定区别&#xff0c;因此会造成性能上的差异 文章目录 PANet&#xff1a;基于金字塔注意力网络的图像超分辨率重建1.相关资料2.简介3.模型结构4.…

resnet50、FPN、Panet结构及代码

起初faster-r-cnn&#xff0c;只采用最后一层特作为rpn以及head部分的特征图 &#xff0c;后来不断改进&#xff0c;有了FPN&#xff0c; 再后来有了Panet&#xff0c;一般来说网络的层数越深它的语义信息越丰富。但是随着网络层数的加深&#xff0c;检测所需的位置信息就会越差…

实例分割--(PANet)Path Aggregation Network for Instance Segmentation

PANet Path Aggregation Network for Instance Segmentation 收录&#xff1a;CVPR2018(IEEE Conference on Computer Vision and Pattern Recognition) 相关&#xff1a; COCO2017/CityScapes instance segmentation 第一 论文提出了PANet&#xff0c;在Mask R-CNN的基础上…