什么是数字签名?
所 谓数字签名就是信息发送者用其私有密钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵 赖性),同时也确保信息报文在经签名后末被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。
加密:改变数据本来的意思
解密:还原数据本来的意思
密钥:加密解密时所使用的参数,可以是一个整数或一串字符,或其它任何加解密方法所能理解的形式
对称密钥:加密和解密使用同一个密钥
非对称密钥:加密和解密使用两个密钥,其中任何一个密钥加密的数据都能且都只能被另一个密钥解开
公钥私钥:非对称密钥的一种实践形式,两个密钥中公开的人人皆知的那个称为公钥,保密的那个称为私钥
PKI:公钥基础设施,泛指使用了非对称加密的平台、工具等
3.2 常见实践
公钥私钥:
A将数据用自己的私钥加密,发送给B,C,D
B,C,D用A的公钥解密
B,C,D将各自的响应用A的公钥加密,发送给A
A将返回的响应用自己的私钥解密
1.通信双方都拥有各自的公钥和私钥.顾名思义,公钥是给所有需要跟你通信的人的.私钥只能你自己保存.
2.如果A需要给B发送一份加密的数据,那么就需要用B的公钥对该文件进行加密,然后加密过的数据传送到B方后,B使用自己的私钥对加密文件进行解密.得到明文. 这就是数据的保密性传输过程.
3.因为B的公钥可能很多人都具有.那么,怎么保证这个密文就是从A那里传送出来的呢? 我们就需要A将明文用B的公钥加密过之后,再用自己的私钥加密一次.因为私钥只有A自己拥有.所以当B收到加密过两次的密文之后.首先通过A的公钥解密该数据包.证明该文件确实是从A方发送过来的.也就是数据传送的不可抵赖性,即数字证书认证. 确认数据是从A方发送过来的之后,再通过自己的私钥解密该数据保,得到明文.
用公钥加密对称密钥:
A用对称密钥将数据加密,然后用自己的私钥把对称密钥本身加密,一起发送给B,C,D
B, C, D用A的公钥解密对称密钥
B, C, D用解密后的对称密钥继续解密,得到原始数据
...
keytool -genkey -keyalg RSA -alias mykey -keystore mykeystore.jks
结果您将获得一个文件:mykeystore.jks,其中包含一个私钥和一个自签名的公钥。
查看jks里的信息内容
keytool -list -keystore client.jks
keytool命令总结:
(1):生成keysrore文件
keytool -genkey -alias hehe
(2):用keytool在所选的keystore文件中创建客户端证书:
keytool -genkey -keyalg RSA -alias jwsdp-client -keystore hehe.keystore
(3)将新客户端证书从keystore导出到证书文件.cer中:
keytool -keystore hehe.keystore -export -alias jwsdp-client -file hehe.cer
(4)生成.jks文件:hehe.jks,其中包含一个私钥和一个自签名的公钥。
keytool -genkey -keyalg RSA -alias hehe -keystore hehe.jks
(5):
将新客户端证书导入到服务器的证书颁发机构文件hehe.jks中。这使服务器在SSL相互验证过程中信任该客户端。
keytool -import -alias root -keystore hehe.jks -file hehe.cer
(6):进入当前目录 下 分离client.jks中的 公钥和私钥分离后公钥(证书)是.crt私钥是.key
JKS2PFX client.jks apache client exportfile D:\program\jdk1.5.0_06\bin
(7):查看jks里的keystore信息内容
keytool -list -keystore client.jks
(8):查看keystort内容
keytool -list -v -keystore mm.keystore
一,建立jks文件:keytool -genkey -keyalg RSA -alias server -keystore server.jks
二,导出jks文件中的证书(.cer):keytool -export -alias server -keystore server.jks -file server.cer
三,把证书导入到jks文件:keytool -import -trustcacerts -alias root -keystore client.jks -file server.cer
JDK中keytool常用命令
-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias 产生别名
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中
-keyalg 指定密钥的算法
-validity 指定创建的证书有效期多少天
-keysize 指定密钥长度
-storepass 指定密钥库的密码
-keypass 指定别名条目的密码
-dname 指定证书拥有者信息 例如: "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn"
-list 显示密钥库中的证书信息 keytool -list -v -keystore sage -storepass ....
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件 keytool -export -alias caroot -file caroot.crt
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目 keytool -delete -alias sage -keystore sage
-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage
-import 将已签名数字证书导入密钥库 keytool -import -alias sage -keystore sagely -file sagely.crt
导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。
分享到:
相关推荐
#### 二、什么是keystore? keystore是一种用于存储密钥和数字证书的容器,它是Java安全架构的一部分。在Android开发中,keystore用来存储用于签署应用的密钥对和证书。通过使用keystore,开发者能够确保他们的应用...
keystore是一个安全的存储库,其中包含了用于对应用程序进行数字签名的私钥。这个签名不仅验证了应用程序的来源,还确保了应用程序的完整性和不可篡改性。本文将深入探讨Android平台keystore系统,包括其工作原理、...
在Android系统中,数字签名是确保应用程序安全性和可信任性的重要机制。每个Android应用都需要一个数字证书来标识其开发者,并且对于具有特定权限的permission,只有拥有相同证书的应用才能获得这些权限。Android...
本文将详细介绍这两种数字签名技术以及如何利用CryptoAPI在C#环境中实现它们。 首先,MD5(Message-Digest Algorithm 5)是由Ronald Rivest在1991年设计的,它是一种单向散列函数,能够将任意长度的数据转化为固定...
在Android应用开发中,签名文件(keystore)是至关重要的,因为它们用于对APK进行数字签名,确保应用的完整性和安全性。批量生成keystore文件是开发者在进行多项目管理或者团队协作时可能会遇到的需求,尤其对于那些...
### 数字签名的Java实现 #### 一、引言 随着互联网的发展,数据安全变得尤为重要。数字签名技术作为保障信息安全的重要手段之一,在电子商务、电子政务等领域有着广泛的应用。本文主要探讨了基于Java语言的数字...
Keystore是一个包含数字证书的文件,用于存储私钥和公钥对。在Android中,它用于对APK进行签名,以验证应用的来源和完整性。生成Keystore的命令行工具是`keytool`,它是Java Development Kit (JDK)的一部分。你可以...
keystore 是一个包含一个或多个数字证书的文件,用于验证应用的开发者身份。在Android中,keystore用于对APK进行签名,确保其完整性,防止被篡改,并且是应用更新时必须使用的同一签名。 1. **生成keystore文件** ...
3. **数字签名原理**:解释哈希函数在数字签名中的作用,以及如何使用Signature类创建和验证数字签名。 4. **证书和证书链**:讨论X.509证书的概念,以及如何使用KeyStore类管理和操作证书,确保公钥的安全。 5. *...
在Android应用开发中,数字签名是一个至关重要的环节,特别是在应用程序发布之前。数字签名的主要目的是确保应用的完整性和开发者身份的验证,防止应用被篡改,并允许用户信任并安装该应用。下面将详细介绍Android...
在Android平台上,每个应用都需要被一个唯一的数字签名,这个签名用来验证应用的来源和完整性。 二、生成keystore文件 1. 使用`keytool`命令行工具:在Java的JDK安装目录下的bin目录里,有一个名为`keytool`的工具...
Java 数字签名是一种用于验证数据完整性和发送者身份的安全机制,它是基于公钥加密技术的。在 Java 平台上,我们可以使用内置的 Keytool 和 Jarsigner 工具来实现数字签名的操作。以下是对这个主题的详细讲解: 一...
### iReport + JasperReport 客户端打印与数字签名详解 #### 一、概述 iReport 是一个用于设计 JasperReports 报告模板的图形界面工具,而 JasperReports 则是一款非常流行的 Java 报告工具,它能够从各种数据源...
Java 数字签名和数字证书是网络安全领域中的重要概念,它们在确保数据的完整性和来源的可信性方面扮演着关键角色。这份"Java 数字签名、数字证书生成源码"的压缩包提供了实现这些功能的代码示例,对于理解和应用Java...
在Java中,数字签名通常涉及到使用Java的KeyStore API来管理密钥对,包括私钥和公钥。KeyStore是Java提供的一个安全组件,用于存储用户的证书和密钥,确保它们的安全。 在Java中,数字签名的实现主要是通过`java....
"java数字签名和证书应用" 数字签名是指使用某种签名算法对某些内容进行数字签名后得到的数字凭证。证书(Certificate)是数字签名的一种特殊形式,是用某种签名算法对某些内容(比如公钥)进行数字签名后得到的,...
PDF数字签名是确保PDF文档完整性和来源可信的重要技术,它基于公钥基础设施(PKI)。在本项目中,我们使用了Java的ITEXT库来处理PDF文档,以及keytool工具来生成数字证书。以下是关于这些知识点的详细说明: 1. **...
在Android系统中,每个安装的APK都需要进行数字签名,以验证应用的来源和完整性。签名的主要作用包括: 1. **验证身份**:签名可以证明应用是由特定开发者发布的,有助于建立用户对应用的信任。 2. **保证完整性**...