说明
在以前做applet(现在很少用)的时候,用到了java的密钥和数字证书管理工具keytool,jar签名和校验工具jarsigner,当时懵懵懂懂,现在读了一些文章后稍微清楚了一点点,所以把对于它们的一点个人理解记录下来。
keytool
keytool:它管理一个存储了私钥和验证相应公钥的与它们相关联的X.509 证书链的密钥库。密钥库中的一条证书(可以包含多条证书条目)可以导出为数字证书文件,导出的数字证书文件只包含主题信息和对应的公钥。
在命令行中输入“keytool –genkeypair”将自动使用默认的算法生成公钥和私钥,并以交互方式获得公钥持有者(证书持有者)的信息。
C:/>keytool-genkeypair
输入keystore密码:123456
您的名字与姓氏是什么?
[Unknown]:gjb.com
您的组织单位名称是什么?
[Unknown]:
您的组织名称是什么?
[Unknown]:
您所在的城市或区域名称是什么?
[Unknown]:
您所在的州或省份名称是什么?
[Unknown]:
该单位的两字母国家代码是什么
[Unknown]:
等等
以上操作将生成一个公钥和一个私钥,这里并未指定使用何算法,将使用默认的DSA算法。
同时上述操作将创建一个数字证书,证书中包含了新生成的公钥和一个名字为“CN=gjb.com, OU=, O=, L=, ST=, C=”的主体(人或机构)的对应关系。其中“CN=gjb.com, OU=, O=, L=, ST=, C=”是X.500格式的全名,包含了主体的国家、州、城市、机构、单位和名字。这样,这个证书将证明相应的公钥是这个人或机构所拥有的。
以上生成的公钥、私钥和密钥库默认都保存在用户的主目录中创建一个默认的文件“.keystore”中。
由于“.keystore”中包含了私钥,所以是一个需要保密的文件,因此上述操作提示为该文件设置一个密码:“输入密钥库密码”,这里因为是第一次使用该密钥库,因此输入的密码“123456”将成为该默认的密钥库的密码(实际使用时应该设置复杂的口令)。以后再使用这个密钥库时必须提供这个口令才可以使用。
以上操作最后还提示“输入密钥密码”,这里“mykey”是默认的别名,使用该名字可以在密钥库“.keystore”中找到对应的公钥、私钥和证书。此处输入的密码是对应于该别名的私钥的密码,密钥库中每个别名可以使用不同的密码加以保护。密钥库中可以存放多个条目(公钥/私钥对和证书),它们在密钥库中以别名(alias)区分,默认别名是“mykey”。
例子:生成密钥库和导出证书
1、keytool -genkeypair -alias "a" -keyalg "RSA" -keystore "b.keystore" -validity 36500
2、keytool -export -alias a -keystore b.keystore -file c.crt
jarsigner
jarsigner 工具用于两个目的:
为 Java 归档 (JAR) 文件签名
校验已签名的 JAR 文件的签名和完整性
数字签名是从一个实体(人、公司等)的某些数据(正被“签名”的数据)和私钥计算出来的位串。与手写的签名一样,数字签名有很多有用的特性:
其真实性可被校验,方法是使用与生成签名的私钥对应的公钥进行计算。
它不可能被伪造(假设私钥没有泄露)。
它是已签名数据的函数,因此不能被声明为其它数据的签名。
已签名的数据不能被修改;如果被修改了,签名将不再被校验为可信的。
为了给文件生成实体的签名,该实体首先必须与一对公/私钥相关联,以及一个或多个鉴别其公钥的证书。证书是来自一个实体的已被数字签署的声明,表示某个其它实体的公钥有特定值。
jarsigner 使用来自密钥仓库的密钥和证书信息为 JAR 文件生成数字签名。密钥仓库是私钥及其相关的 X.509 证书链(它鉴别相应公钥)的数据库。使用 keytool 实用程序来创建和管理密钥仓库。jarsigner 使用实体的私钥创建签名。
经签名的Jar包内包含了以下内容:
1、原Jar包内的class文件和资源文件签名文件
2、META-INF/*.*SF:这是一个文本文件,包含原Jar包内的class文件和资源文件的Hash
3、签名块文件 META-INF/*.DSA:这是一个数据文件,包含签名者的 证书和数字签名。其中 证书包含了签名者的有关信息和 public key;数字签名是对 *.SF 文件内的 Hash 值使用 private key 加密得来
arsigner 的缺省行为是签名 JAR (或 zip)文件。使用 -verify 选项将其转换为校验已签名的 JAR 文件。
有问题可以参考这篇文章:http://blog.csdn.net/yangxt/article/details/1796965
分享到:
相关推荐
除了基本的`keytool`和`jarsigner`用法,还有一些可选参数可以调整,例如`-certreq`用于生成证书请求,`-changealias`用于更改Keystore中的别名,`-keypass`和`-storepass`分别用于指定密钥库口令和存储库口令,`-...
KeyStore Explorer是Java命令行实用程序keytool和jarsigner的免费GUI替代品。 官方网站: : 特征: 在各种KeyStore类型之间创建,加载,保存和转换:JKS,JCEKS,PKCS#12,BKS(V1和V2)和UBER 更改密钥库和...
keytool 和 jarsigner 工具完全取代了 JDK 1.1 中提供的 javakey 工具。这些新工具所提供的功能比 javakey 提供的多,包括能够用口令来保护密钥仓库和私钥,以及除了能够生成签名外还可以校验它们。 keytool 命令...
KeyStore Explorer是Java命令行实用程序keytool和jarsigner的开源GUI替代。 KeyStore Explorer通过直观的图形用户界面展示其功能以及更多功能。 安全Java的简化开发软件开发人员应该能够专注于眼前的问题,而不必为...
下面将深入探讨如何使用keytool和jarsigner工具进行签名以及部署Swing和RCP应用的过程。 #### 使用Keytool创建密钥库和证书 1. **创建密钥库**:首先,使用`keytool`命令创建一个密钥库。在命令行中输入: ``` ...
在 Java 平台上,我们可以使用内置的 Keytool 和 Jarsigner 工具来实现数字签名的操作。以下是对这个主题的详细讲解: 一、数字签名的概念 数字签名并非我们日常生活中的笔迹签名,而是一种电子形式的签名,它结合...
总结来说,Android Apk的签名过程涉及到安全性和开发者身份的确认,无论是通过图形界面的Eclipse,还是命令行的keytool和jarsigner,或者是源码级别的签名,都是为了确保用户能够安全地下载和安装应用。正确理解和...
- **Keytool和Jarsigner**:Android使用标准的Java工具Keytool和Jarsigner来生成数字证书,并给应用程序包签名。 - **zipalign优化**:使用zipalign工具对APK文件进行优化,可以减少内存消耗,提高启动速度。 #### ...
使用DIYPDA汉化及签名工具包时,用户需要按照一定的步骤操作,例如首先反编译APK,然后进行汉化,接着用Keytool和jarsigner或ApkSigner签名,最后使用ZipAlign优化。在整个过程中,可能需要了解一些基本的Android...
5. 使用Keytool和Jarsigner这两个Java工具生成和签名证书。 6. 证书与应用的包名无关,不同的应用可以使用相同的证书签名。 7. 系统不允许签名证书不同的应用覆盖安装同一包名的应用。 对于APICloud平台的开发者,...
签名过程通常涉及使用Java JDK自带的keytool和jarsigner工具。 - keytool用于生成密钥库,例如`keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity ...
对于更高级的用户或者自动化发布流程,可以使用JDK自带的keytool和jarsigner命令行工具进行签名操作。 2.1 使用keytool生成密钥文件: ``` keytool -genkey -v -keystore androidguy-release.keystore -alias ...
SignApk类主要实现了Java的keytool和jarsigner工具的功能,但更为简化,方便开发者集成到自动化构建流程中。 【描述】"java项目源码" SignApk类是用Java语言编写的,它包含了处理APK签名的源代码。通过阅读和分析...
MIDP 2.0_Signed_MIDlet_Developers_Guide_v2_0_en.pdf这份官方文档详细介绍了如何为MIDlets创建和管理数字签名,包括使用工具(如keytool和jarsigner)进行签名过程,以及处理证书和密钥库的相关操作。 签名的益处...
- 使用Keytool和Jarsigner进行证书生成和签名。 - 使用zipalign工具对APK进行优化,以提高加载效率。 在开发过程中,ADT插件和Ant工具提供了调试模式和发布模式。调试模式下,自动使用调试证书签名;发布时,开发者...
如果需要签名,还需要使用Java的keytool和 jarsigner 工具完成签名过程,以便安装到设备上。 对于开发人员来说,Apktool是调试、学习或逆向工程Android应用的重要工具。它可以帮助开发者了解应用的工作原理,找出...
在实际应用中,开发者可能需要配置JDK环境变量,因为签名过程依赖于Java的keytool和jarsigner工具。配置环境变量后,C#程序可以调用这些命令行工具进行签名操作。 总的来说,"APKSigner.zip"提供了一种用C#编写APK...
签名过程是通过Java的Keytool和 jarsigner 工具实现的。使用 re-sign.jar,开发者需要提供原始APK、新的密钥库(包含签名密钥)以及相关的密码。这个工具方便那些需要更改APK签名,例如在不同渠道分发时,但不希望...
Java提供了一套完整的工具和API(如keytool和jarsigner)来生成、管理和使用数字证书。以下是一些基本步骤: 1. 生成密钥对:使用keytool生成包含公钥和私钥的Keystore文件。 2. 申请数字证书:使用keytool生成CSR...
在Java的安装目录下通常包含了签名和证书相关的工具,例如keytool和jarsigner。这些工具允许开发者对APK进行签名和验证,以确保其完整性和安全性。签名过程是发布到Google Play或其他应用市场所必需的步骤,而验证...