码迷,mamicode.com
首页 > 编程语言 > 详细

Java Security安全系列文档翻译笔记————数字签名、keystore、证书

时间:2015-08-10 18:08:51      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:security   证书   密钥   keystore   

Digital Signatures数字签名

1.Private Key(私钥)签名一个文档,生成一个Digitial Signature(数字签名)。
Private key通过keytool(SDK中的工具)或Security API方法,通过jarsigner工具或Security API方法生成Digitial Signaturre;
2.将于私钥对应的Public Key(公钥) 和 文档发送给接收方(私钥和公钥是对应的)
4.再通过Public Key验证文档是否未经过改动,和确定是你发送的

在用Public Key验证文件的Digital Signature之前,需要先验证Public key的权威性。这就需要你提供一包含Public Key和证书授权机构Key的证书。

Certificate证书:

组成:
1.一个Public key
2.一个证书拥有者(Owner)的可区分的实体信息(人、公司...),就是你的个人信息
3.一个证书的Digitial Signature(数字签名),由证书发行者(issuer)签名证书得到的,证明Public Key确实是Owner的。
4.一个Issuer的可区分信息,即发行证书的组织信息

a:验证证书的有效性,是通过issuer的public key来验证 证书的Digital Signature。而改issuer的public key又可能包含在另一个证书里,这个证书又被另一个证书验证。如此验证下去,直到一个你已经信任的证书上。由此形成了一个认证链。
b.如果认证链无法建立,接收方可以计算证书的fingerprint(指纹,也就是特定信息吧),是通过命令行keytool -import 或者 -printcert。接收方通过电话问证书的持有者,对比以下他们fingerprint的是否一样,一样就证明证书没变过。
好了,通过a、b你可以确定Certificate(证书)没有被篡改。另一个潜在不确定因素是发送者的身份,有时候证书是self-signed(自签名):使用证书中Public key对应的Private key进行签名。也就是Issuer == Owner。
Self-signing a certificate在开发和测试时时有用的,然而在部署给用户之前,最好从被信任的第三方那里得到证书,将其作为certification authority(CA 认证机构)。步骤是:你发一个使用自签名证书的为了得到签名的请求(a selft-signed certificate signing request (CSR))给CA,CA验证你在CSR中的签名和你的个人信息。CA通过用自己的Private key签名的证书证明你是该Public key的拥有者。任何信任该CA的public key的用户,就可以来验证该证书。在很多实例中,CA本身有一个更高级的CA给他的证书,导致形成了一个certificate chains(验证链)。

(PS:这就是为什么买火车票每次都需要安装证书,因为它是自签名的。之前没上过铁道部网站,肯定也没有信任。而一旦你信任了铁道部的证书,那么以后一旦铁道部的Private Key泄露,就会有N多假网站了。)

你信任的Certificates of entities通常会做位被作为trusted certificates(可信任证书)导入到keystore。证书里的Public key就可以验证对应的Private key的签名的文档、代码。验证的工具如下:
1.jarsigner公寓(如果你的文档,代码是在JAR包中)
2.API方法
3.运行时,当Policy File 允许用户读取资源,如果他的签名是授权的话(class 文件必须在JAR文件中)
when a resource access is attempted and a policy file specifies that the resource access is allowed for the code attempting the access if its signature is authentic. The code‘s class file(s) and signature must be in a JAR file.

因为要和代码一起发送证书,所以要导出证书:keytool -export和API方法可从你的keystore导出到文件。接收方可以接受keytool则可以使用keytool -import导入成为可信任的证书。

KeyStores

KeyStores是存储Private Keys和对应的Public Keys的受密码保护的数据库。其包含两种实体:1.上文提到的受信任的证书 2.key/证书实体。每个实体都包含private key和对应的Public key证书。每个条目通过alias(别名)来区分。

The keytool tool can be used to

  • Create private keys and their associated public key certificates
  • Issue certificate requests, which you send to the appropriate certification authority
  • Import certificate replies, obtained from the certification authority you contacted
  • Import public key certificates belonging to other parties as trusted certificates
  • Manage your keystore

的房

keytool工具可以被用于:

1.创建private keys和对应的public key的证书
2.发布验证请求给合适的证书授权机构
keytool -certreq -alias alias -file csrFile 

将csrFIile(命令执行后,生成的。发送给验证机构)
3.导入回复的证书,验证其权威性
(验证机构会返回
4.导入证书
keytool -import -alias alias -file ABCCA.cer -keystore storefile 
其中ABCA.cer是虚拟的证书名

5.管理keystore


以下为Tool和API的一些要点:
1.使用工具去签名文档,文档必须被打包。可以使用jar工具,然后再使用jarsigner去签名这个jar文件。

The cacerts file represents a system-wide keystore with CA certificates. 


场景:

ABC是一个CA(授权机构),你发送CSR(签名请求)给CA。CA返回给一个认证你Public key的证书,你需要导入你的keystore,但在这之前你要先验证这个证书的真实性。所以还要先导入CA的自签名,或上一级的CA证书。
CA发送的新的证书如何替换自签名的证书
keytool -import -trustcacerts
    -keystore storefile
    -alias alias 
    -file certReplyFile 


































版权声明:本文为博主原创文章,未经博主允许不得转载。

Java Security安全系列文档翻译笔记————数字签名、keystore、证书

标签:security   证书   密钥   keystore   

原文地址:http://blog.csdn.net/zhjali123/article/details/47342837

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!