Java学习笔记之JAAS-Part2

来源:互联网 发布:移动端商城源码 编辑:程序博客网 时间:2024/04/30 03:09
消息摘要是数据块的数字指纹;


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中匹配证书并校验
0 0