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
以上是 Java代码签名与授权 的全部内容, 来源链接: utcz.com/z/392975.html