密钥管理
通过一个带密码的数据库来存储自己的私钥及信任的公钥(称为Keystore);它包括了两类入口:信任证书和证书密钥对(自己的私钥和证书)[与PGP类似],他们都可以通过别名来标识.一个KeyStore的所有者可以通过不同的别名来标记不同的证书-私钥对而用于不同的场合.
通过java工具来实现基本流程
工具介绍:工具介绍密钥和证书管理工具(密钥和证书管理工具Keytools)
它主要是负责公–私钥对,向CA发证书申请,接受CA的回复,记录信任的公钥—实体对应表,维护密钥库(keystore),命令基本形式是:keytoolcommandoptions主要有如下几种命令:-certreq–产生一个证书签名请求(GenerateaCertificateSigningRequest,CSR)给CA,由它来认证自己的证书.-delete–删除对应的密钥库的记录-export将公钥证书输出到某个文件-genkey.在密钥库中存入私钥-公钥对,后者保存在一个自签的证书中.--import将一个信任的证书导入,或者是接到了CA的回复,将该证书取代原来密钥库中自签的证书.keypasswd–为某私钥分配密码-list-列出密钥库中所有入口-storepasswd给密钥库分配密码.
Java文档处理工具文档处理工具(jar)
如果要对代码签名,需要先用jar将其打包,然后用jarsigner来签名,命令的基本格式是jarcfjar-fileinput-file(s)
Java文档签名及验证工具(jarsigner)
jarsigner工具通过密钥库中的数据来对jar文件进行签名和认证;
策略编辑器(policytool)
编辑系统的策略文件
使用代码签名1.签名方大致流程如下所示.
:
各个步骤通过前面的工具使用介绍,具体实现细节就不再描述了,现在列出自己尝试时使用的几个命令:[生成私钥]keytool-genkey-aliassignFiles-keypass123456-keystorestore-storepass123456[打包]jarcvfalgrim.jar*.class[签名]jarsigner-keystorestore-signedjarsAlgrim.jarAlgrim.jarsignFiles[生成证书]keytool-export-keystorestore-aliassignFiles-filecer.cer
2.接收方大致流程如下所示.接收方大致流程如下所示方大致流程如下
:
直接运行代码是不允许的,只有先将证书引入本地的keystore,作为信任的证书插入;
通过使用PolicyTool来配置相应的策略文件,通过两种方式来运行他:1.用java-Djava.security.manager-Djava.security.policy=raypolicy-cpsCount.jarAppName的形式2.通过配置浏览器使用的java.home\lib\security\java.security文件,就可以带安全检查地运行该程序.
文件交换
在发送文件时,可以通过数字签名来保证文件的一致性和发送者的身份.步骤如下:
发送者[基本流程同代码签名是一样的发送者基本流程同代码签名是一样的]基本流程同代码签名是一样的
接收者
与代码签名的不同之处在于是通过jarsigner来验证的.
使用JDK1.2的API来构造自己的例程
基础API
产生公钥和密钥对
[得到密钥产生器得到密钥产生器]KeyPairGeneratorkeyGen=KeyPairGenerator.getInstance("DSA","SUN");[SecureRandomrandom=初始化密钥产生器]SecureRandom.getInstance("SHA1PRNG","SUN");keyGen.initialize(1024,random);[产生公钥和密钥]KeyPairpair=keyGen.generateKeyPair();PrivateKeypriv=pair.getPrivate();PublicKeypub=pair.getPublic();
对数据签名
[得到一个签名对象]Signaturedsa=Signature.getInstance("SHA1withDSA","SUN");[初始化签名对象dsa.initSign(priv);初始化签名对象]初始化签名对象[对数据签名]dsa.update(buffer,0,len);对数据签名[得到签名的数据byte[]realSig=dsa.sign();得到签名的数据]得到签名的数据