Java学习笔记之JAAS-Part2
2014-02-28 20:58
204 查看
消息摘要是数据块的数字指纹;
SecureRandom类产生的随机数,远比由Random类产生的那些数字安全得多
公共密匙和私有密匙对有2个用途:一个用来加密,一个用来认证;
用于加密:别人发给你的消息用公共密匙加密,那么只有你有私有密匙对这个消息进行解密;
用于认证:你用私有密匙对消息进行签名,其他人只有用你的公有密匙才能解密消息,从而确认消息是你发的消息;
DSA算法的过程有3个步骤:
1. 产生一个密匙对;
2. 给消息签名;
3. 对消息进行验证;
证书的核心内容是:
。被认证身份的名字;
。被认证身份的公共密匙;
。对上列信息用私有密匙进行签名;// 这个私有密匙应该是认证机构的私有密匙,这个签名动作的主体是认证机构
// 由此可见,认证机构负责生成证书,并发放证书给消息接受者
// 所以整个过程有2级认证,证书认证(对应证书的公匙和私匙),信息认证(对应信息的公匙和私匙,信息可以指代码,信息等。。。)
所以证书的意义是;
1. (消息接受者)通过某种途径得到认证机构的公共密匙;
2. 用这个公共密匙对证书进行解密,得到被认证身份的名字和公共密匙;
3. 发送消息者(即上面的被认证身份),用自己的私有密匙对要发送的信息进行签名;签名后发送;
4. 接受消息的人(同时也是拥有证书的人,用第2个步骤中得到的公共密匙对该消息签名验证)
keytool -genkey -keystore alice.store -alias alice
keytool -export -keystore alice.store -alias alice -file alice.cert
keytool -printcert -file alice.cert
keytool 用来管理私钥仓库(keystore)和与之相关的X.509证书链(用以验证与私钥对应的公钥),也可以用来管理其他信任实体。
keytool 将密钥和证书储存在一个所谓的密钥仓库中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥。(口令即密码,可设置)
在密钥仓库中有两种不同类型的项:密钥项- 可信任的证书项 -
如果私匙是“DSA”类型,那么缺省的签名算法是"SHA1withDSA",
如果私匙是“RSA”类型,那么缺省的签名算法是“MD5withRSA”,
-》从上列描述推测,所谓的签名是先计算数据块的指纹(消息摘要),然后对指纹进行DSA/RSA加密运算
在生成 DSA 密钥对时,密钥大小的范围必须在 512 到 1024 位之间,且必须是 64 的倍数。缺省的密钥大小为 1024 位。
所谓签名,就是用实体的(签名人,在证书中也称为签发人)私钥对某些数据进行计算。私钥用于计算签名
****自签名证书使用流程:消息发送人(同时担任证书签发人)-Alice,消息接受人-Bob
第一阶段:传递可信任证书
Alice:
1. keytool -genkey -keystore alice.store -alias alice // 创建密匙库,并用别名生成密匙对;
2. keytool -export -keystore alice.store -alias alice -file alice.cert // 导出证书文件;自签名证书
Bob:
可选操作:keytool -printcert -file alice.cert // 打印证书;
1. keytool -import -keystore bob.store -alias alice -file alice.cert // 将证书加入Bob的密匙库中
第二阶段:传递信息
Alice:签名文档:
1. jar cvf document.jar document.txt
2. jarsigner -keystore alice.store document.jar alice // 添加签名;
Alice把文档传送给Bob
Bob: 校验文档:
1. jarsigner -verify -keystore bob.store document.jar // jarsigner自动在bob.store中匹配证书并校验
SecureRandom类产生的随机数,远比由Random类产生的那些数字安全得多
公共密匙和私有密匙对有2个用途:一个用来加密,一个用来认证;
用于加密:别人发给你的消息用公共密匙加密,那么只有你有私有密匙对这个消息进行解密;
用于认证:你用私有密匙对消息进行签名,其他人只有用你的公有密匙才能解密消息,从而确认消息是你发的消息;
DSA算法的过程有3个步骤:
1. 产生一个密匙对;
2. 给消息签名;
3. 对消息进行验证;
证书的核心内容是:
。被认证身份的名字;
。被认证身份的公共密匙;
。对上列信息用私有密匙进行签名;// 这个私有密匙应该是认证机构的私有密匙,这个签名动作的主体是认证机构
// 由此可见,认证机构负责生成证书,并发放证书给消息接受者
// 所以整个过程有2级认证,证书认证(对应证书的公匙和私匙),信息认证(对应信息的公匙和私匙,信息可以指代码,信息等。。。)
所以证书的意义是;
1. (消息接受者)通过某种途径得到认证机构的公共密匙;
2. 用这个公共密匙对证书进行解密,得到被认证身份的名字和公共密匙;
3. 发送消息者(即上面的被认证身份),用自己的私有密匙对要发送的信息进行签名;签名后发送;
4. 接受消息的人(同时也是拥有证书的人,用第2个步骤中得到的公共密匙对该消息签名验证)
keytool -genkey -keystore alice.store -alias alice
keytool -export -keystore alice.store -alias alice -file alice.cert
keytool -printcert -file alice.cert
keytool 用来管理私钥仓库(keystore)和与之相关的X.509证书链(用以验证与私钥对应的公钥),也可以用来管理其他信任实体。
keytool 将密钥和证书储存在一个所谓的密钥仓库中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥。(口令即密码,可设置)
在密钥仓库中有两种不同类型的项:密钥项- 可信任的证书项 -
如果私匙是“DSA”类型,那么缺省的签名算法是"SHA1withDSA",
如果私匙是“RSA”类型,那么缺省的签名算法是“MD5withRSA”,
-》从上列描述推测,所谓的签名是先计算数据块的指纹(消息摘要),然后对指纹进行DSA/RSA加密运算
在生成 DSA 密钥对时,密钥大小的范围必须在 512 到 1024 位之间,且必须是 64 的倍数。缺省的密钥大小为 1024 位。
所谓签名,就是用实体的(签名人,在证书中也称为签发人)私钥对某些数据进行计算。私钥用于计算签名
****自签名证书使用流程:消息发送人(同时担任证书签发人)-Alice,消息接受人-Bob
第一阶段:传递可信任证书
Alice:
1. keytool -genkey -keystore alice.store -alias alice // 创建密匙库,并用别名生成密匙对;
2. keytool -export -keystore alice.store -alias alice -file alice.cert // 导出证书文件;自签名证书
Bob:
可选操作:keytool -printcert -file alice.cert // 打印证书;
1. keytool -import -keystore bob.store -alias alice -file alice.cert // 将证书加入Bob的密匙库中
第二阶段:传递信息
Alice:签名文档:
1. jar cvf document.jar document.txt
2. jarsigner -keystore alice.store document.jar alice // 添加签名;
Alice把文档传送给Bob
Bob: 校验文档:
1. jarsigner -verify -keystore bob.store document.jar // jarsigner自动在bob.store中匹配证书并校验
相关文章推荐
- JAVA学习笔记--4.多线程编程 part2.多线程关键字
- Java学习笔记之JAAS-Part1
- java学习笔记——网络编程
- java学习笔记应用技术(二)
- JAVA学习笔记---类的继承
- 学习笔记_linux——java程序部署
- Java学习笔记之多线程 1
- Java 学习笔记 5 - 初始化与清理
- Java消息中间件学习笔记四 -- ActiveMQ的使用,【队列模式】
- 学习笔记1:android java class文件头注释怎么写 FileHeader
- java学习笔记_多态应用
- java学习笔记 第二篇 核心技术(二)
- [JAVA学习笔记-84]关于死锁故障的反思
- java.lang.ThreadGroup学习笔记
- 【Java学习笔记】第5章:控制部分(第2部分)
- java学习笔记
- JAVA学习笔记(抽象类和接口)
- Redis学习笔记之二 :在Java项目中使用Redis
- 2.21JAVA学习笔记
- java学习笔记(九):Java 流(Stream)、文件(File)和IO