jvmjar包的代码认证和签名(转载)青青子衿

如果你循序渐进的看到这里,那么说明你的毅力提高了,jvm的很多东西都是比较抽像的,如果不找相对应的代码来辅助理解,其实很难有个比较形象的思维,

前面我努力的尝试通过将概念投射到代码的方式去讲解jvm的各个细节,希望你能够试着自己也去找到对应的代码段,然后试着读一读。一开始可能没有那么容易,

但是没有一件事情,一开始就是容易的。

代码认证与签名

终于到了这一节,这一节,其实相对于笔记二,笔记三和笔记四,是相对比较容易的,即使你对密码编码学一窍不通也不妨碍你学习,我们不会涉及到太多的实现,而主要从应用着手,

旨在浅显易懂,触类旁通。在下一节中,我们会来尝试做一次签名,前提是你看完这一节.class文件的校验器,记得它分为几趟不,四趟,

而jar包的代码签名认证和class检验的第一趟是有联系的。 class文件校验器的第一趟会对jar文件的结构,长度等进行校验,其中也包括对jar的签名和认证进行校验。

那么什么是jar包的签名和认证?

我们相关的class文件打包成了jar包之后,在传递这个jar的时候,如何防止jar不被他人暗中的修改呢?

方案一,可能你会想到对整个jar文件进行加密,这个思路是可行的,但是却显得比较笨拙,对每个jar文件都执行加密,需要的时候又要执行解密,不仅浪费时间,效率上也是不可取的。

方案二。对jar包的部分内容进行加密,这个思路好像效率高点,但是对哪一部分进行加密?如果没有加密的那一部分被修改了怎么确认?这又一个问题。

以上两种简单地解决方案虽然看起来简单但是实施起来都是有困难的,那么有没有好的方法?

有,在jar文件上hash摘要,什么是hash摘要,这里我不丢书包了,简单的说hash摘要就是有一个叫hash(String content)的哈希函数,当你传入内容的时候它都将返回一个独一无二个的

128的hash数值,这样无论传入的内容多大,hash摘要的长度是固定的。当然附加到jar文件的最后面时总体上并不会影响jar的结构和传输。

只要接收方也拥有这个hash函数,那么将jar的内容进行hash后的值再和附加在jar中的hash值做对比就可以知道jar的内容是否被修改过了,看起来好像完美了,

但是如果有意破坏的人把jar和hash都替换成具有破坏性ar文件以及由这个具有破坏性的jar文件进行hash运算的hash值,那么前面做的事情也就都没有意义了,于是聪明的人类想到了

对hash摘要运用私钥进行加密,这样只有加密方才能对hash值加密,而解密的那方运用公钥进行解密,而且它总是知道怎么解密的,我们把对hash摘要进行加密的过程称之为签名。

这就是jar包签名的大致过程好吧,上面引述了那么多,无非是想描述下面图3-3的过程,如果你看到这个图完全明白,那前面那段废话就直接跳过吧!

接下来还有一个概念需要你理解----认证

先不管什么是认证,先来了解一下密码学的一点小知识

前面我说过,看这篇文章是不需要你有密码学的知识的,是的,我骗你,至少基本的概念还是要理解过的。如果你完全不懂,不要慌,我举个简单的例子来帮你简单的理解一下一

两个基本的概念。

第一个概念对称加密,什么是对称加密?假设A想要说暗语,A想说5的时候就把5*3,然后把5*3的结果15告诉B,因为B知道A说暗语的规则,所以B就把15除以3,

知道A要告诉自己5,这就是对称加密。

第二个概念非对称加密,假设A要把一句话告诉B,A就把这句话放到一个有两个完全不同的锁(lock1,lock2)的箱子里,然后锁上,A有lock1的钥匙,把箱子交给B,

而B拥有lock2的钥匙,B通过打开lock2

也能看到箱子里的字条,这就是非对称加密。而A拥用的那把钥匙叫私要,B拥有的那把钥匙复制多份之后分给他们组员,就成了公钥。没有那么可怕对吧!

而在这里我应该负责任的告诉你,对于hash摘要的签名用的就是非对称加密! 回到我们的主题,什么是认证,当我们队hash摘要用私钥进行加密,

然后把公钥发给B和B组里的所有人的时候,如果中间传递的环节被人偷天换日的将公钥换掉了,这个时候,jar文件的签名的真实性又受到了威胁,怎么保证传递公钥的时候,

公钥的真实性,这就是我们提到的认证,我们如果把公钥交给一个公正的认证机构,

认证机构对你的公钥进行加密之后的序列号,我们就称为证书,需要公钥的人得到证书后向认证机构申请解密,这样安全性就好很多了。

上面的一堆废话,其实也是为了描述下面这个图的整个过程,如果你一眼就看明白下面这个图,那就忽略上面的描述吧

下面让我们动手来实践一下对jar进行签名吧!

第一步,首先配置jdk的环境变量,如果你的电脑已经配置了,那直接跳过这一步

第二步,来写几个简单的类,简单的才是大家的。你完全可以直接copy我的代码,部分看不懂,忽略它,做实验而已,对那个jar文件签名不是签,这个例子的代码逻辑是后面才用到的,不用读

第一个类Doer

第二个类

第三个类

好了,编译一下,用强大的ecplise来编译,项目-右键-Build Project(工具是拿来用的,不要浪费这些强大的功能!)

第三步,打jar包,用ecplise就可以了就有导出jar包的功能,我还是那句老话,有工具不用,不是牛,是蠢。

步骤一,项目-右键-Export-java-JAR file-next

第四步,用java的keytool生成密钥对,用java的jarsigner做签名(记得我们说过对hash摘要的加密是非对称加密的吗?这里就需要两把不同的钥匙啦),一步步跟我来。

步骤五,对jar进行摘要并对hash摘要进行加密生成签名,放置到jar文件结构的尾部

而关于这两个附加文件的用处,我这里也简单的说明一下,首先从名字上来讲他是八个字符,他默认取我们的密钥对的名字的前八个字符做名字而因为

它包含了签名的版本,签名者,还有被签名的类名,以及这个类的hash摘要,第四行是整个本文件的摘要,用于jar包的校验

到这里jar签名的实验已经完毕!!!!!

查看上面步骤四截图,我们来验证一下在笔记七里说过的话。

1.我们说过hash摘要是一个128的值,对不对呢,看证书指纹那一行,md5:....

你数一数总共有几个十六进制数,32个,一个十六进制数用4个位可以表示完,那么总共是几位,32*4=128,但是后面还有一个sha1的,怎么回事他貌似不止128位,是滴,散列函数多种多样,

到底用那个散列函数,md5还是sha1这个就看你喜欢,而要使用哪个散列函数是可以指定的,keytool的参数-keyalg "DSA",这个参数就是用来指定用什么散列算法的,默认的就是DSA,

普通的128位散列数已经是安全的了。

2.在 笔记七中,记不记得最下面那个图,有一个认证机构会对解密签名(被加密的hash摘要)的公钥做认证(也就是加密公钥),并发布证书,我们这里没有认证机构,你有没有这个疑问?

keytool程序在生成密钥时,总是会生成一个自签名证书(自签名是指:如果附近没有认证机构,可以用私钥对公钥签名,生成一个自签名证书)

总结:

通过本章我们学习对一个jar进行签名,一个jar可以同时被多个机构或作者签名,看起来实验很复杂其实很简单。如果你还想了解更多关于jar包签名的知识,

THE END
0.对地质一窍不通的小撒随口一说竟是正确答案人民领袖习近平 联播+ 中国领导人 央视快评 习式妙语 热解读 天天学习 直播 片库 栏目大全 节目单 听音 微视频 主持人 下载央视影音 海外频道 iPanda English Монгол 地方 乡村振兴 生态 一带一路 央博 文化 旅游 健康 乐龄 阅读 数智 5G 产业+ 网展 央央好物 下次自动登录 忘记密码 登录 立即注册jvzquC41vx4de}{0eqs0497613804:4XKFKOdYVjkk=T8mYOjmjo5aN4638337xjvor
1.寿命长的人,一般不会有4个特征,快来了解下资讯频道特征四:对养生知识一窍不通 寿命长的人往往会了解一些养生知识,例如不吃寒凉的食物,尤其是寒冷季节,吃水果前会烫一下,很少直接吃冷藏过的食物。再比如说喜欢泡脚、走路、按摩穴位,每天都会给自己休闲放松一下。而短寿的人一般不会在乎这些,他们喜欢顺其自然,随心所欲地生活,很少保健身体。 jvzquC41{cthuqjpi0kbu}ic{0ipo8rqdkrf1;7294;2;:>45287;A:7:44ivvq
2.同是共享单车创始人,ofo的戴威负债20亿,摩拜胡玮炜却身价15亿如果不趁着抓紧时间解决危机,那摩拜就是下一个ofo小黄车。 此时,正在准备上市的美团向胡玮炜抛出了橄榄枝。如果收购顺利,摩拜的困境迎刃而解,美团也能提高上市估值。 一举两得,何乐而不为呢? 胡玮炜 可对于创业公司的创始人来说,为了实现理想或是抓住功成名就的机会,要不死咬着公司的控制权不松手,要不为了更大的利益作出让步。 Ofojvzq<84yyy4489iqe0ipo8hqpvkov8641273385914834:;96a715==77;770|mvon
3.寓言故事的成语大全古代音乐家公明仪每次弹琴时,他的琴声引来很多鸟儿与蝴蝶。当看到水牛在吃草,就对水牛弹奏几曲,结果水牛无动于衷地走开,公明仪大叹:“对牛弹琴,一窍不通。” 讥笑听话的人不懂对方说得是什么。用以讥笑说话的人不看对象。 【南辕北辙】 战国时期,魏安王决定攻打赵国都城邯郸,大臣们都反对他,季梁给他讲一个jvzquC41okv/t~nygp4dqv4ygp~vg8~w{ct03956954ivvq
4.上游时尚|坂本龙一,当你了解他的那一刻会义无反顾地爱上他靠着这架破旧的钢琴,坂本龙一与中国音乐家们共同谱曲完成了第一版溥仪登基的音乐。 坂本龙一与中国音乐家 关于中国的电影,曲风自然要有中国的韵味在,这离不开中国的传统乐器。而那时的坂本龙一对中国民乐一窍不通,一切只能从零开始。他跑遍满大街买来了琵琶和二胡,在他的音乐笔记上笨拙的用拼音和图画进行记录jvzquC41yy}/ezhd0eun1npujotjjsi1|oyww44246.2<2341837;665avd0qyon
5.转载陈其钢:我继续往前走,前途未卜陈其钢:我们的标准教育是从苏联搬过来的,弄一个规矩,然后再套。西方,比如法国教育系统里没有这个,你考进作曲系,说不定之前对此一窍不通,有一些创新的观念就可以。比我们要自由,要开放。 不过西方也以保守势力为主。60年代布列兹影响了全世界。他建立了一个特别牢固的皇宫,你说他坏,不是,那是本能。一直到今天jvzquC41yy}/elto0gjv0ls1kplp1;:831756A60jvs
6.《中国科学报》:一路“斩华雄”的他,是教学最好的“十八罗汉”从一名意气风发的青年学子,到如今年过古稀的北京航空航天大学退休教师,近半个世纪里,李尚志有着太多堪称“传奇”的过往——8年时间完成从山区老师到研究生的蜕变,用3个月将一门课程从一窍不通“啃”到第一名,研究生阶段解出世界难题,直至“越级”成为新中国首批博士中的一员…… jvzquC41pg}t0kzcc0kew7hp1ktgq8622856;>:90jzn
7.豆汁儿:外地人之砒霜,北京人之蜜糖翻译一下,就是乾隆爷高贵的味蕾,要喝豆汁儿。 关于乾隆爷在吃上面的造诣,鹅君在《那些年,乾隆在苏州翻过的牌子》已有详细的说明:对烹饪一窍不通的万岁爷,却一直有着一双善于发现美食的眼睛。至此,民间小吃豆汁儿跃过龙门入了宫。 不过,无论是民间还是宫廷,豆汁儿少说也有数百年历史;喜欢喝茉莉花茶的老佛爷慈jvzquC41o0sbhnsiyq4dp8lqpirwg8k{q{ykwl136<7;A3jvor
8.追觅科技工作怎样,加班多不多?本文非原创,转自于互联网公开文章202一场“拉通”往往一个小时起步,一通胡乱开下来,完全没有任何结论。参会者,明白的一言不发,混水摸鱼的PPT满天飞。散会一看,大眼瞪小眼,各回各家。问题,还是在那烂着。 为什么会出现这种状况? 无非以己昏昏还妄图使人昭昭,所谓管理层对所管业务一窍不通。一场大会开完,看似酣畅淋漓,实则浪费生命。 jvzquC41zwkrk~3eqo549:84846:687566<:8B8