Java代码签名与授权

本文将涉及到这几个概念: Digital signatures, certificates, and keystores

在网上看到很多文章教人如何对applet签名,有很多命令让人看的费解,本文试图解释签名授权的基本概念,从而来理解

类似下面这样的命令:

jar -cvf abc.jar abc.class

keytool -genkey -validity 7200 -keystore abc.store -alias abckey
keytool -export -keystore abc.store -alias abckey -file abc.cer

jarsigner -keystore abc.store abc.jar abckey

 

Digital signatures:基本的用法

1  你用自己的私匙(private key)给文档或代码签名

2  你发送签好名的文档给接收方

3  并且提供公匙(public key)给接收方,public key与private key相对应。

4 接收方用你提供的public key保证在收到文档之前,文档没有被修改。

但是接收方必须保证public key本身是可信的,因此你在提供public key的同时还需提供一个包含public key的certificates为你的public key提供担保。

certificates:包含

1 public key

2 识别名信息 distinguished name information 比如姓名 公司名称 等等。(我认为如果是自认证就是自己随便写的,如果是第三方认证那就是第三方的一些信息)

3 digital signature 用来担保包含的public key是真实的

4 签名人的识别名信息

接收方验证certificates是否合法的一种办法就是用public key来验证他包含的数字签名,public key可以被保存在另外一个数字签名也用public key验证的certificates里,无限循环,直到你信任的public key 为止。

如果接收方不能建立一个信任链条,可以使用keytool -import or -printcert命令计算certificate fingerprint(s). fingerprint 是一个唯一的可靠的数字来验证certificate 。从技术上讲,fingerprint 其实就是certificate的hash值。接收方可以打电话给certificate的发布方,如果fingerprint的值相同,那么代表certificate的也是一样的。

因此你可以保证certificate没有在传输过程中被修改。  另外一个使用certificate的潜在的不确定就是发布方的身份 。

自签名的certificate 一般用来开发和测试程序 (application)   ,当部署给用户的时候,可以从第三方的certificate 权威机构获取一个可信任的certificate 。需要提交申请,可能还会验证驾照等其他信息。第三方权威机构会用自己的private key来签名,任何信任这个机构的人,可以用该机构的public key来验证certificate 上的签名。有时,该机构还有上级机构为其签名,从而形成一个验证的链条。

 

如果你要发送签好名的文档或代码给其他人,你还要提供一个包含了public key的certificate ,用 keytool -export 命令,可以从keystore导出你的certificate变成一个文件。收到这个文件的人可以导入keystore,把这个certificate变成可以信任的certificate。可以用keytool -import命令实现。

 

KeyStore:

private key  以及相关联的public key certificate 保存在一个需要密码的数据库里,叫做keystore 。keystore可以包含2种内容,一个是上面提到过的可以信任的certificate,另外就是key/certificate,包含private key 以及public key certificate。 keystore里的每一项都用别名(alias)来标识。

keystore的拥有者可以保存多个key,通过不同的别名来使用。 

 

原文地址:http://docs.oracle.com/javase/tutorial/security/sigcert/index.html

 

 

 

 

 

 

posted @ 2014-03-09 17:46  叫什么都行  阅读(2598)  评论(0编辑  收藏  举报