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
版权声明:本文为博主原创文章,未经博主允许不得转载。