- 浏览: 226491 次
- 性别:
- 来自: 沈阳
文章分类
- 全部博客 (105)
- java (30)
- linux unix (19)
- 版本控制 (15)
- ajax (2)
- 开发工具及辅助工具 (3)
- database (2)
- flex (10)
- 其它 (2)
- windows (1)
- 开源企业应用 (6)
- 开源erp (4)
- 开源cms (0)
- 开源门户 (0)
- php (1)
- ofbiz&opentaps (4)
- 运维管理 (0)
- MOQUI (3)
- linux unix mysql (0)
- mysql (2)
- hadoop (3)
- android (0)
- 微信公众号 (1)
- java cassandra nosql (0)
- Nosql (1)
- socket (1)
- tcp (1)
- udp (1)
- 十六进制 (1)
- ofbiz (1)
- docker (1)
- 虚拟化 (0)
- 分布式 (0)
最新评论
-
w87848608:
用phpunit --coverage-html命令一样出现了 ...
关于phpunit与Selenium取coverage的配置(原创) -
surpass_li:
好久没来这了,不好意思,你参照Deploying OFBiz ...
ofibz10.04部署到 jboss5.1.0成功 -
tide2046:
求部署文档。谢谢。
ofibz10.04部署到 jboss5.1.0成功 -
Romotc:
征文 +1,1楼的方法还是有点问题。
eclipse编译时过滤SVN版本控制信息方法 -
我改名了:
谢谢,收 藏 了,备用。
Java获取客户端真实IP地址的两种方法(转)
jdk工具keytool和jarsigner帮助Part20.背景
keytool是JDK中包含的密钥和证书的管理工具。用于管理私钥及其相关的X.509证书链的keystore。X.509证书链用于认证对应的公钥,keystore类似于一个数据库。同时keytool还用于管理信任实体发布的证书。
jarsigner是JDK中包含的用于JAR文件签名和验证的工具。为Java档案文件(JAR)生成签名,以及对已签名的jar文件的进行校验。
1.工具Location
这两个工具都位于$JAVA_HOME/bin目录下,其中$JAVA_HOME是JDK的安装目录。
这两个工具都是在命令行中使用,在命令行窗口输入:
keytool和jarsigner即可获取命令的工具的使用方法。
2.jarsigner工具简介
jarsigner工具主要有以下两个作用:
a.对JAR文件签名
b.校验签名以及签名JAR文件的完整性
JAR文件可以同时包含多个package的类文件,图片,声音以及数字数据,一边更快更方便的发布。jar工具用来创建JAR文件,从技术角度来说,任何zip文件都可以被看作是JAR文件,虽然使用jar创建的JAR文件包含META-INF/MANIFEST.MF文件。
数字签名是使用一些数据(被签名的数据)和实体的private key计算出来的位串(bit string),和手写签名一样,数字签名有很多特征:
权威性可以被校验,通过使用与private key对应的public key来计算。
不可伪造,假设private key不被泄露。
签名是数据的一个功能,因此不能同时作为其他数据的签名。
用于签名的数据不可更改,否则签名无法被校验。
为了使实体的签名作为文件被生成,实体首先必须有一对密钥,即public & private key,以及一些认证public key的证书。
证书就是由一个实体对另一个实体的签名,证明另一个实体的公钥具有某些特定的值。
jarsigner使用keystore中的key和certificate的信息来为JAR文件生成一个数字签名。keystore是用来存储private keys和它们对应的用于认证公钥的X.509证书链的数据库。keytool工具用于创建和管理keystore。
jarsigner使用实体的private key来生成签名。被签名的JAR文件包含了keystore中private key对应的public key的证书拷贝。jarsigner可以使用其包含的证书来校验JAR文件的数字签名。
从J2SE 5.0开始,jarsigner可以生成包含时间戳的签名,因此系统/部署可以检查被签名的JAR中包含的证书是否有效。J2SE 5.0中也包含了获取该时间戳信息的APIs。
到目前为止,jarsigner只可以对SDK的jar工具生成的JAR文件以及zip文件进行签名。当使用jarsigner对zip文件进行签名时,会自动生成META-INF/MANIFEST.MF文件。
jarsigner的默认功能是对JAR/zip文件进行签名,可以使用-verify选项来校验签名。
3.概念介绍
keystore别名:所有的keystore实体是通过唯一的别名来访问的。当使用jarsigner来对JAR文件签名时,必须指定用来签名的private key所对应的别名。
keystore存储位置:jarsigner包含了-keystore选项来指定keystore的URL。
keystore实现:请参考本文的第一部分。
支持的签名算法:目前为止,jarsigner可以使用SHA1withDSA或者MD5withRSA两种散列算法来对JAR文件进行起那名。
签名JAR文件:当使用jarsigner来对JAR文件签名时,输出的已经被签名的JAR文件和输入的JAR文件除了以下两点之外完全相同:
签名文件,后缀名为.SF
签名块文件,后缀名为.DSA
这两个文件的基本文件名(不包含后缀名)是通过-sigFile选项指定的。如果没有指定该选项,那么基本文件名会选取alias的前8个字符,并转换为大写字符。如果少于8个字符,则使用全部的alias名字。如果alias中包含了不能作为签名文件名的字符,那么转换为下划线。
签名文件(.SF):签名文件和manifest文件类似,当使用jarsigner对文件进行签名后,总是包含在JAR文件中。也就是说,对JAR文件中的每个source文件,.SF文件都有三行,和manifest一样,列举了以下的内容:文件名、使用的散列算法SHA、SHA的值。在manifest文件中,么个source文件的SHA散列值是source文件中二进制数据的散列值。在.SF文件中,每个source文件的散列值是manifest文件中这三行的散列值。签名文件同时在文件头包含了整个manifest文件的散列值,用于优化校验。
签名块文件(.DSA):.SF文件被签名,并将签名放在.DSA文件中,同时.DSA文件还包含证书或者证书链。
签名时间戳:在J2SE5.0版本中,jarsigner工具在签名时可以生成并存储签名时间戳。并且jarsigner支持不同的签名机制,该功能是可选的,并且可以通过以下选项在签名时进行控制:
-tsa url
-tsacert alias
-altsigner class
-altsignerpath classpathlist
JAR文件校验:当签名合法并且JAR文件中的任何文件都没有被修改时,JAR校验成功。JAR文件校验包括以下步骤:
校验.SF文件本身的签名。
校验.SF文件中包含的每个实体的散列。
读取JAR文件中.SF文件中包含的每个文件。读取的过程中,计算文件的散列,并将计算结果与manifest文件中对应的值进行比较。
上述步骤中任何一步失败,整个校验过程停止,并抛出安全相关的异常,由jarsigner捕获并显示。
多签名JAR文件:JAR文件可以被多个用户进行签名。
4.jarsigner工具帮助
C:\j2sdk1.4.2_15\jre\lib\security>c:\j2sdk1.4.2_15\bin\jarsigner.exe
Usage: jarsigner [options] jar-file alias
jarsigner -verify [options] jar-file
[-keystore <url>]
[-storepass <password>]
[-storetype <type>]
[-keypass <password>]
[-sigfile <file>]
[-signedjar <file>]
[-verify]
[-verbose]
[-certs]
[-internalsf]
[-sectionsonly]
[-provider]
...
举例说明如下:
C:\>jar cf pg.jar org\*.*
C:\>jarsigner -storetype jks -keystore c:\mykeystore.keystore -digestalg MD5
-sigalg MD5withRSA -signedjar pgsigned.jar pg.jar myalias
キーストアのパスワードを入力してください:
MANIFEST.MF内容如下:
Manifest-Version: 1.0
Created-By: 1.6.0_12 (Sun Microsystems Inc.)
Name: org/jff/example/util/PrintGreeting.class
MD5-Digest: fJspbDcp8N2+CQko6Ciiig==
MYALIAS.SF文件内容如下:
Signature-Version: 1.0
MD5-Digest-Manifest: v6+Q+Hvz6nmkmwlskcIorg==
MD5-Digest-Manifest-Main-Attributes: qGefyOwqCj8su+kQaMjbBA==
Created-By: 1.6.0_12 (Sun Microsystems Inc.)
Name: org/jff/example/util/PrintGreeting.class
MD5-Digest: WiikmBlOsrbL53bcUpA74g==
MYALIAS.RSA的内容为二进制内容。
C:\>jarsigner -verify pgsigned.jar
jar が検証されました。
修改MYALIAS.SF文件的内容,然后再校验:
C:\>jarsigner -verify pgsigned.jar
jarsigner: java.lang.SecurityException: cannot verify signature block file META-
INF/MYALIAS
5总结
本文是介绍Java安全工具keytool&jarsigner文章的第二部分,主要介绍了jarsigner的功能及相关概念,并对jdk包含的jarsigner工具进行了简单的说明。
关于keytool的介绍,请参考本文的第一部分。
发表评论
-
在ofbiz框架中实现https双向认证(笔记)
2016-04-08 10:16 462ofbiz默认的配置文件中没有提供服务端信任的证书配置项, ... -
hadoop2.4在windows7搭建单节点环境的简要介绍
2014-05-27 16:18 903本文参照 hadoop2.2在window7上搭建单节点 ... -
关于ofbiz 集成urlrewritefilter实现url 伪静态化
2013-03-19 12:52 1749关于ofbiz 集成urlrewritefilter实现ur ... -
hadoop学习笔记(动态删除节点)
2012-09-19 13:41 1020在hadoop集群环境下需要将两台datanode删除,为了不 ... -
CentOS系统安装Tomcat切换JDK的方法
2011-10-14 09:38 1121CentOS系统安装Tomcat切换JDK的方法 ... -
一个从字符串中提取金额的正则表达式
2011-05-19 15:44 2120一个从字符串中提取金额的正则表达式,初 ... -
tomcat远程调试 方法1:适用于tomcat6 修改startup.bat 在尾部修改成以下列方式启动 set JPDA_ADDRESS=8000 se
2011-01-05 12:37 1477tomcat 6 远程调试 ... -
Hadoop学习笔记二 安装部署
2010-07-14 11:22 736原文 http://www.cnblogs.com ... -
Hadoop学习笔记一 简要介绍
2010-07-14 11:21 754这里先大致介绍一下Hadoop. 本文大部分内容都 ... -
Java获取客户端真实IP地址的两种方法(转)
2010-05-14 15:04 1214在JSP里,获取客户端的IP地址的方法是:request.ge ... -
20款开源搜索引擎系统
2010-04-16 19:32 1223一些开源搜索引擎系统介绍,包含开源Web搜索引擎和开源桌面搜索 ... -
在JasperReport报表中加入大写金额(笔记)
2010-04-14 09:06 2636摘自 http://www.blogjava.net/hisp ... -
jdk工具keytool和jarsigner帮助Part1
2010-01-08 12:41 1596jdk工具keytool和jarsigner帮 ... -
JPA 批注参考 (转载)
2009-03-30 13:27 1010JPA批注参考 1 JPA 批 ... -
通过urlrewrite和filter实现动态网站生成静态页并缓存的方案
2008-10-06 14:37 3290关于改造动态网站为生成静态页的方案 url 重 ... -
jsp生成验证码
2008-01-15 15:27 880<%@ page contentType="i ... -
tomcat下配置使用awstats笔记
2008-01-10 11:43 4559tomcat下配置使用awstats笔记 1。环境 使用的 ... -
ip地址与Long型数据进行相互转换
2007-12-04 23:17 4496/** * 根据ip地址计算出long型的数据 * @ ... -
java对象初始化过程(转)
2007-04-22 22:57 1354java new 一个实例时候,对象初始化过程 1.父类 st ... -
java 中 Hashtable 排序 (转)
2007-04-10 22:41 4743import java.util.Arrays; import ...
相关推荐
本文将详细介绍如何使用`keytool`和`jarsigner`工具来为Android APK文件进行签名。 首先,`keytool`是Java Development Kit (JDK)自带的一个命令行工具,用于管理和创建数字证书,包括生成密钥对(公钥和私钥)以及...
JDK提供了一个名为`jarsigner`的工具,用于对Java类库和Android APK文件进行数字签名。本文档将详细介绍如何使用`jarsigner`工具对APK进行签名。 **一、`jarsigner`工具简介** `jarsigner`是Java开发工具包(JDK)...
keytool生成公私钥,默认jdk8 使用keytool生成bks或者jks时报错,缺少jar包 包含:bcprov-jdk15-143.jar,local_policy.jar,US_export_policy.jar
jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助文档jdk8帮助...
jdk1.6中文帮助文档(PART2) jdk1.6中文帮助文档(PART2) jdk1.6中文帮助文档(PART2)
Keytool是Java Development Kit(JDK)自带的一个用于管理密钥对和数字证书的工具,而Keytool-IUI则进一步提升了用户体验。 在Java安全模型中,密钥对(包括公钥和私钥)用于加密和解密数据,以及创建和验证数字...
`keytool`是Java Development Kit (JDK)自带的一个命令行工具,用于创建、管理和查看存储在Keystore中的密钥和证书。Keystore是存储私钥、公钥以及信任证书的地方,可以理解为一个安全的数据库。通过`keytool`,...
下载该文件后利用JDK中jarsigner工具生成签名文件 将位置定位在jdk的bin文件中,输入以下命名行: keytool -genkey -alias ChangeBackgroundWid get.keystore -keyalg RSA -validity 20000 -eystore ...
jdk1.6中文帮助文档(PART3) jdk1.6中文帮助文档(PART3) jdk1.6中文帮助文档(PART3)
jdk1.6中文帮助文档(PART1) jdk1.6中文帮助文档(PART1) jdk1.6中文帮助文档(PART1)
jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8帮助手册~jdk_1.8...
jdk-8-x32.part2.rar
Keytool-IUI是对Java标准版(JDK)自带的keytool命令行工具的一种增强,提供了更加用户友好的图形界面,使得密钥库的管理和操作变得更加直观和简便。 Keytool是Java平台上的一个标准工具,用于生成、存储和管理密钥...
一共3个分卷 jdk-1_5.part1 jdk-1_5.part2 jdk-1_5.part3
JDK1.5 中文版文档.part2
jdk&wrar&project.part2
在Java Development Kit (JDK) 中,`keytool` 是一个强大的命令行工具,用于管理密钥对(公钥和私钥)以及数字证书。它主要用于创建、存储、备份、恢复、导入和导出这些安全相关的实体。在这个场景中,我们将深入...
java 7 , JDK7u71 免安装版part2
使用jarsigner对apk进行手动签名 jarsigner是JDK提供的针对jar包签名的通用工具,
由于原来的jdk被卸载,官网找不到7,下载的也是32-bit的,因此留存备用