【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~
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️⃣ 使用技巧
- 生成密钥库:使用Java自带的keytool工具生成密钥库,其中包含需要的密钥对。可以指定密码和其他选项;
- 签名JAR文件:使用jarsigner命令对JAR文件进行签名,提供密钥库、别名、密码等必要参数;
- 验证签名:可以使用jarsigner来验证已签名的JAR文件,以确认其完整性和信任;
- 添加时间戳:通过指定时间戳服务器的URL,可以为签名添加时间戳,确保应用程序在证书过期后仍然有效。
🌾 总结
jarsigner命令是Java开发工具中用于对JAR文件进行签名的重要工具之一。它通过数字签名实现身份验证和保证应用程序的完整性,提供了应用程序发布和分发的安全性。但它也引入了额外的复杂性和一些操作步骤。通过理解和正确使用jarsigner,可以提高Java应用程序的安全性和用户的信任度。
总的来说,jarsigner为Java应用程序提供了一种有效的方式来验证应用程序的来源和完整性,帮助建立用户和开发者之间的信任关系。
相关文章:
【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~
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 可选参…...
c#调用c++ dll,Release版本内存访问错误
最近遇到个比较经典的案例,在c#中调用yara进行文件检测,yara是c编写的一个非常强大库,github有个大佬用c#对其进行了封装,使其能在跨平台下,只需编译yara的so或dll就能直接跑。但总是在Release版本下时不时就崩溃&…...
内网安全:Cobalt Strike 与 MSF 联动( 会话 相互转移 )
内网安全:Cobalt Strike 与 MSF 联动( 会话 相互转移 ) 在渗透中,有时候 Cobalt Strike 会话可能会受限制,所以我们需要把 Cobalt Strike 会话转移到 MSF 上进行后面的渗透。也有的时候会话在 MSF 上,但是…...
性能测试讲解超详细Jmeter
目录 什么是性能 性能测试的目的 功能测试和性能测试 基准测试 负载测试 稳定性测试 压力测试 并发测试 总结 性能测试指标 响应时间 并发数 吞吐量 点击数 错误率 资源使用率 总结 性能测试流程 性能测试需求分析 性能测试计划和方案 编辑性能测试用例编辑 性…...
微服务 – Spring Cloud – Nacos 配置中心
微服务 – Spring Cloud – Nacos 配置中心 文章目录 微服务 – Spring Cloud – Nacos 配置中心打开nacos面板新建配置引入依赖配置文件启动类业务类打开nacos面板新建配置 Data ID: nacos-config-client-dev.yaml Group: DEV-CLOUD2023 config:info: config info lalalal …...
超细,设计一个“完美“的测试用例,用户登录模块实例...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 好的测试用例一定…...
【C#】文件拖拽,获取文件路径
系列文章 【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:h…...
SAP PI/PO初步了解 2023.07.03
SAP PI/PO 是SAP 提供的一种集成中间件解决方案,用于在组织内部或不同组织之间实现系统的无缝通信和数据交换。它使企业能够以统一高效的方式集成各种应用和系统,无论这些系统的技术平台或数据格式如何。 以下是关于SAP PI/PO的简要概述: 1…...
Java中生产者消费者模型
在Java中,生产者消费者模型是一种常见的多线程编程模型,用于解决生产者和消费者之间的数据交互问题。 简介 生产者(Producer)负责生成数据,并将数据放入共享的缓冲区(队列)中。消费者…...
测试Hyperledger Fabric环境
首先进入fabric-samples目录中的first-networked 子目录 cd fabric-samples/first-network 在first-network目录下有一个自动化脚本byfn.sh,可以使用-help参数查看相应的可 用命令,在命令提示符中输入如下命令: ./byfn.sh --help命令执行成功后&#…...
ClickHouse查询sql长度超超过最大限制
ClickHouse查询sql长度超超过最大限制 Max query size exceeded ClickHouse exception, message: Code: 62. DB::Exception: Syntax error: failed at position 262102 (‘fwm00ud6a3ynu0kaxr.ya0eyemkbzdvrxkhwgchccll’) (line 10406, col 17): fwm00ud6a3ynu0kaxr.ya0eyemk…...
【Axure教程】拖动调整行高列宽的表格
表格是在系统软件中非常常用的工具。表格通常由行和列组成,用于以结构化的方式显示和组织数据。它们在各种场景中都有广泛的应用,包括数据分析、数据录入、报表生成、项目管理和数据可视化等领域。 今天作者就教大家如何在Axure里制作一个能通过鼠标拖动…...
中间件-netty(1)
netty 前言篇 文章目录 一、IO基础篇1.概念1.1 阻塞(Block)和非阻塞(Non-Block)1.2 同步(Synchronization)和异步(Asynchronous)1.3 BIO 与 NIO 对比1.3.1 面向流与面向缓冲1.3.2 阻塞与非阻塞1.3.3 选择器的问世 2.NIO 和 BIO 如何影响应用程序的设计2.1 API调用2.2 数据处理2…...
【方法】想把PDF文档转换成PPT,如何操作?
很多小伙伴在工作中,会使用PDF或者PPT来展示内容。那如果需要把PDF转换成PPT,要如何操作呢? 我们知道,PPT转换成PDF很容易操作,只需通过PPT的【导出】选项,就可以直接转换成PDF;还可以通过“另…...
Linux--设置目录或文件的默认权限:umask权限掩码
目录起始权限是从777,普通文件起始权限从666 为何我们创建一个目录或文件,默认权限是你所看到的样子? 因为凡是在umask中出现的权限,都不应该在最终权限中出现! 最终权限起始权限&(~umask)…...
C++实现websocket单server单client全双工通信(基于boost!!!)
自身环境:ubuntu18.04gcc7.5.0boost1.7,3 环境配置 gcc或者g一般都有,这里主要介绍一下boost的配置方法 执行如下代码: wget https://boostorg.jfrog.io/artifactory/main/release/1.73.0/source/boost_1_73_0.tar.bz2 --no-check-cert…...
好用的网址5
搜番神器:https://trace.moe/ Online converter:Online converter - convert video, images, audio and documents for free 格式转换 GIF Explode:https://gif-explode.com/ SongDonkey:SongDonkey - AI Online Audio Split…...
做项目去实习到底做的什么?
300万字!全网最全大数据学习面试社区等你来! 今天是手机编辑的文章,说说做项目/实习这回事。 我之前发过一些视频,讲校招四要素的,其中一个很重要的部分就是实习。 对社招同学来说,就简单了,面试…...
VSC++: 验证身份证
缘由https://ask.csdn.net/questions/1082358 void 验证身份证() {//缘由https://ask.csdn.net/questions/1082358int 权重[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }, 个 0, j 0, a 0, he 0;char M[] "10X98765432", 身份号[100][20]{};//…...
机器学习-方差和偏差理论
机器学习-方差和偏差理论 关于机器学习方差和偏差的内容其实很重要,这个方差和偏差可以帮助我们去分析,模型的泛化能力和过拟合的程度。 下面我们先给存储方差和偏差的公式: 注意,下式当中, f ( x ; D ) 表示在数据集…...
TFT LCD屏幕硬件解析:从XPT2046触摸屏到背光控制的完整指南
TFT LCD屏幕硬件解析:从XPT2046触摸屏到背光控制的完整指南 在工业控制面板和医疗设备显示屏等专业领域,TFT LCD屏幕凭借其高精度显示和可靠触控性能成为首选方案。不同于消费级产品的通用设计,专业场景下的屏幕需要工程师深入理解从触摸采样…...
Cursor Pro免费激活终极指南:如何突破试用限制重新获得AI编程体验
Cursor Pro免费激活终极指南:如何突破试用限制重新获得AI编程体验 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reach…...
告别桌面图标混乱:NoFences让你的数字空间井然有序
告别桌面图标混乱:NoFences让你的数字空间井然有序 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否曾打开电脑就被满屏散乱的图标淹没?工作文件…...
3步精通Path of Building PoE2:流放之路2玩家的角色规划零门槛指南
3步精通Path of Building PoE2:流放之路2玩家的角色规划零门槛指南 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 你是否曾在《流放之路2》中遭遇这样的困境:投入数十小时培养的…...
3分钟免费激活Windows和Office:KMS_VL_ALL_AIO终极指南
3分钟免费激活Windows和Office:KMS_VL_ALL_AIO终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office文档突然变成只…...
springboot+vue基于web的药店管理系统 药品商城在线购药系统
目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 后台管理系统(SpringBoot&…...
3分钟搭建免费B站视频解析服务:零基础教程
3分钟搭建免费B站视频解析服务:零基础教程 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 你是否曾经想要保存B站的精彩视频却不知道如何操作?或者需要在自己的网站上嵌入B站视…...
Pixel Couplet Gen部署案例:混合云架构(公有云API+私有云模型)方案
Pixel Couplet Gen部署案例:混合云架构(公有云API私有云模型)方案 1. 项目背景与价值 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的AI春联生成器。该项目基于ModelScope大模型驱动,通过创新的8-bit像素游戏UI设…...
SAP传输请求实战指南:从SE10到STMS的完整流程解析
1. SAP传输请求:为什么需要它? 刚接触SAP系统的朋友可能会疑惑:为什么需要传输请求这个功能?简单来说,就像搬家时需要打包物品一样,当我们在开发环境(DEV)完成了某项功能的开发或配置后,需要把这…...
Java函数计算部署被低估的致命风险:类加载冲突、内存泄漏、上下文丢失——3个真实P0故障复盘
第一章:Java函数计算部署被低估的致命风险:类加载冲突、内存泄漏、上下文丢失——3个真实P0故障复盘在Serverless架构下,Java函数计算因其启动慢、内存占用高而常被“降级使用”,但更隐蔽的风险来自运行时环境的不可见性。我们复盘…...
