java 溯本求源之基础(十二)之 Security--jarsigner

        

目录

1. 签名JAR文件的重要性

2. jarsigner的基本用法

3. 签名过程详解

3.1. 生成摘要

3.2. 创建签名文件

3.3. 生成签名块文件:

3.4. 验证过程详解

5. 使用时间戳签名

6. jarsigner在实际开发中的应用

        示例1:为Web应用签名

        示例2:为Android应用签名

        示例3:在企业环境中使用jarsigner


        Java签名工具jarsigner是一个重要的安全工具,用于对Java Archive(JAR)文件进行签名和验证。本文将深入探讨jarsigner的工作原理、高级用法以及在实际开发中的应用。

1. 签名JAR文件的重要性

        在Java应用开发中,确保代码的安全性和完整性至关重要。通过对JAR文件进行数字签名,可以实现以下目的:

        - 确保代码来源:签名可以证明代码是由可信的开发者或组织发布的。
        - 保证代码完整性:签名还可以确保代码自发布以来没有被篡改。

2. jarsigner的基本用法

        jarsigner的基本命令格式用于签名和验证JAR文件,如前文所述。此外,jarsigner还提供了一些高级选项,用于更精细地控制签名和验证过程。

签名选项:

        - `-sigalg`:指定签名算法,例如`SHA256withRSA`。
        - `-digestalg`:指定摘要算法,例如`SHA-256`。
        - `-signedjar`:指定签名后的JAR文件路径。
        - `-tsa`:指定时间戳服务器的URL,用于时间戳签名。

验证选项:

        - `-certs`:在验证时显示证书信息。
        - `-verbose`:提供详细的验证信息。
        - `-strict`:在发现严重警告时将其视为错误。

3. 签名过程详解

jarsigner在签名JAR文件时执行以下步骤:

3.1. 生成摘要

        对JAR文件中的每个文件计算摘要(哈希值),并将其存储在`META-INF/MANIFEST.MF`文件中。


3.2. 创建签名文件

        使用指定的摘要算法和签名算法对摘要进行签名,生成`.SF`(Signature File)文件。


3.3. 生成签名块文件:

        将签名文件进一步签名,并将结果存储在`.DSA`、`.RSA`或`.EC`文件中(取决于使用的密钥类型)。

3.4. 验证过程详解

        jarsigner在验证JAR文件签名时执行以下步骤:

        1. 验证签名块文件:检查`.DSA`、`.RSA`或`.EC`文件中的签名是否有效。
        2. 验证签名文件:确保`.SF`文件中的摘要与`META-INF/MANIFEST.MF`文件中的摘要匹配。
        3. 验证JAR文件内容:对JAR文件中的每个文件重新计算摘要,并与`META-INF/MANIFEST.MF`文件中的摘要进行比较。

5. 使用时间戳签名

        为了增强签名的可靠性,可以使用时间戳签名。这样即使证书过期,签名仍然有效,因为它证明了代码是在证书有效期内签名的。要使用时间戳签名,可以在签名时使用`-tsa`选项指定时间戳服务器的URL。

6. jarsigner在实际开发中的应用

        在实际的Java应用开发中,jarsigner通常用于以下场景:

        - Web应用:对Web应用的JAR文件进行签名,以确保在下载和执行时的安全性。
        - Android应用:对Android应用的APK文件(本质上是JAR文件)进行签名,以确保应用的来源和完整性。
        - 企业环境:在企业级应用中,使用jarsigner对代码进行签名,以满足安全和合规要求。

        示例1:为Web应用签名

        假设你有一个名为mywebapp.jar的Web应用,你想对其进行签名以确保下载和执行时的安全性。首先,你需要一个密钥库和一个密钥条目。然后,你可以使用以下命令对JAR文件进行签名:

jarsigner -keystore /path/to/keystore -storepass storepassword -keypass keypassword mywebapp.jar myalias

        在这个例子中,/path/to/keystore是密钥库的路径,storepasswordkeypassword分别是访问密钥库和密钥条目所需的密码,myalias是密钥条目的别名。

        示例2:为Android应用签名

        Android应用打包为APK文件,这本质上是一个JAR文件。在发布Android应用之前,你需要对APK文件进行签名。假设你的Android应用的APK文件名为myandroidapp.apk,你可以使用以下命令对其进行签名:

jarsigner -keystore /path/to/keystore -storepass storepassword -keypass keypassword myandroidapp.apk myalias

        示例3:在企业环境中使用jarsigner

        在企业环境中,你可能需要对多个JAR文件进行签名以满足安全和合规要求。你可以编写一个脚本来自动化这个过程。以下是一个简单的bash脚本示例,用于对目录中的所有JAR文件进行签名:

#!/bin/bashKEYSTORE_PATH="/path/to/keystore"
STOREPASS="storepassword"
KEYPASS="keypassword"
ALIAS="myalias"for JAR_FILE in *.jar; dojarsigner -keystore "$KEYSTORE_PATH" -storepass "$STOREPASS" -keypass "$KEYPASS" "$JAR_FILE" "$ALIAS"
done

7. 结论

        jarsigner是Java开发者必不可少的安全工具之一。通过正确使用jarsigner对

        JAR文件进行签名和验证,可以有效地保护Java应用的安全性和完整性。掌握jarsigner的高级用法对于开发安全可靠的Java应用至关重要。当然一般来说我们同样也碰到这个的时候相对较少

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生技术精选:探索腾讯云容器与函数计算的最佳实践

文章目录 写在前面《2023腾讯云容器和函数计算技术实践精选集》深度解读案例集特色:腾讯云的创新实践与技术突破精选案例分析——Stable Diffusion云原生部署的最佳实践精选集实用建议分享总结 写在前面 在数字化转型的浪潮下,云计算技术已成为企业运营…

【Vue.js 3.0】NProgress 进度条

简介 在 Vue 3 中使用 NProgress,你需要先安装 NProgress,然后在你的 Vue 应用中引入它,并在适当的生命周期钩子或路由守卫中调用它的方法。以下是一个简单的例子来展示如何在 Vue 3 应用中集成 NProgress 首先,你需要安装 NPro…

Kafka入门到实战-第五弹

Kafka入门到实战 Kafka常见操作官网地址Kafka概述Kafka的基础操作更新计划 Kafka常见操作 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流平台&…

基于springboot+vue实现的酒店客房管理系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

昇腾训练执行与推理部署系列 入门: 1.开启异腾AI之旅

一、1认识CANN 1、昇腾AI基础软硬件平台介绍2、CANN逻辑架构介绍 1、昇腾AI基础软硬件平台介绍 2、CANN逻辑架构介绍

普联一面4.2面试记录

普联一面4.2面试记录 文章目录 普联一面4.2面试记录1.jdk和jre的区别2.java的容器有哪些3.list set map的区别4.get和post的区别5.哪个更安全6.java哪些集合类是线程安全的7.创建线程有哪几种方式8.线程的状态有哪几种9.线程的run和start的区别10.什么是java序列化11.redis的优…

商品购买过程中,库存的抵扣过程是怎样的?如何防止超卖?

在商品购买的过程中,库存的抵扣过程,一般操作如下: 1、select根据商品id查询商品的库存。 2、根据下单的数量,计算库存是否足够,如果存库不足则抛出库存不足的异常,如果库存足够,则减去扣除的…

mysql+keepalive+lvs搭建的数据库集群实验

前提条件:准备5台计算机,且网络互通 1、客户端 yum groups -y install mariadb-client ip 192.168.0.5 2、lvs1 yum-y install ipvsadm keepalived ip 192.168.0.1 keepalivedvip 192.168.0.215 /etc/hosts 解析192.168.0.1 主机名 3、lvs2 yum-y i…

为什么android创建Fragment推荐用newInstance

FullScreenDialogFragment使用newInstance方法不是因为它是一个单例,而是因为这是创建DialogFragment实例并同时提供参数的一种标准模式。这种模式通常称为静态工厂方法模式,在Android开发中被广泛使用,尤其是用于Fragment的实例化。 newIns…

前视声呐目标识别定位(五)-代码解析之修改声呐参数

前视声呐目标识别定位(一)-基础知识 前视声呐目标识别定位(二)-目标识别定位模块 前视声呐目标识别定位(三)-部署至机器人 前视声呐目标识别定位(四)-代码解析之启动识别模块 …

Java最短路径算法知识点(含面试大厂题和源码)

最短路径算法是计算机科学和图论中的核心问题之一,它旨在找到从一个顶点到另一个顶点或在所有顶点之间的最短路径。这个问题在多种实际应用中都非常重要,如网络路由、交通规划、社交网络分析等。以下是一些与最短路径算法相关的知识点: Dijks…

DHT11温湿度传感器使用视频教程分享

下载地址: 温湿度计(STCDHT11): https://url83.ctfile.com/d/45573183-60623983-9b7f6c?p7526 (访问密码: 7526)

Java常用类和基础API

文章目录 1. 字符串相关类之不可变字符序列:String1.1 String的特性1.2 String的内存结构1.2.1 概述1.2.2 练习类型1:拼接1.2.3 练习类型2:new1.2.4 练习类型3:intern() 1.3 String的常用API-11.3.1 构造器1.3.2 字符串对象的比较…

解决酷狗官网无法播放音乐问题

播放歌曲页面无法播放歌曲,有CORS错误,困扰我很久了。 谷歌浏览器优雅的关闭cors跨域_浏览器关闭跨域-CSDN博客 "C:\Program Files\CatsxpSoftware\Catsxp-Browser\Application\catsxp.exe" --disable-web-security --user-data-dirE:\catsxp…

【学习笔记】java项目—苍穹外卖day10

文章目录 苍穹外卖-day10课程内容1. Spring Task1.1 介绍1.2 cron表达式1.3 入门案例1.3.1 Spring Task使用步骤1.3.2 代码开发1.3.3 功能测试 2.订单状态定时处理2.1 需求分析2.2 代码开发2.3 功能测试 3. WebSocket3.1 介绍3.2 入门案例3.2.1 案例分析3.2.2 代码开发3.2.3 功…

JavaScript之applye、bind和call方法详解

Question Q1 apply()、bind()和call()方法的区别在哪? Q2 apply()和call()的应用场景 Q3 apply()、bind()和call()方法手写实现逻辑 来源 继承自Function.prototype,属于实例方法 console.log(Function.prototype.hasOwnProperty(call)) //trueconsole.l…

Fusion360修改嘉立创EDA专业版生成的3D外壳文件

需要第三方软件的原因 嘉立创EDA专业版生成电路板的3D外壳文件是比较快捷的,但如果侧面精密开孔或者添加其它非常规的元素还是有些局限。嘉立创EDA专业版可以把3D外壳文件导出,这就大大方便了第三方软件的修改。 本文是利用Fusion360修改3D外壳文件&…

Waifu2x:使用深度卷积神经网络的动漫风格艺术的图像超分辨率

Github网址:nagadomi/waifu2x:动漫风格艺术的图像超分辨率 (github.com) 该项目主要讲述的是如何利用预训练的深度学习模型来达到无损扩大收缩和去噪,对于一般训练图像的小伙伴应该很清晰图像经常要通过resize操作固定大小,然后c…

个人推荐Redis比较好的一种使用规范

随着对个人项目的不断开发、迭代和重构,博主在这个过程中总结出了一套使用redis的较好的规范。主要包含Redis的key命名规范和Redis代码规范。 主要内容 主要包含以下几个内容: 同一应用的key在最前面添加统一的前缀,如应用名; 案…

某华为hr擅自给我报名机

某华为hr擅自报名机考 上周,牛客网一位同学爆料: ❝ 今年一月份,华为一位 HR 通过某招聘网站联系到他,然后通过该 HR 加上了业务工程师的微信。随后,该工程师在「经过他本人同意」的情况下,在系统录入了他的…