主要有如下几种命令:
² - certreq – 产生一个证书签名请求(Generate a Certificate Signing Request ,CSR)给 CA , 由它来认证自己的证书。
² -delete – 删除对应的密钥库的记录
² - export 将公钥证书输出到某个文件
² - genkey. 在密钥库中存入私钥- 公钥对, 后者保存在一个自签的证书中。
² --import 将一个信任的证书导入,或者是接到了CA 的回复,将该证书取代原来密钥库中自签的证书。
² keypasswd – 为某私钥分配密码
² -list - 列出密钥库中所有入口
² -storepasswd 给密钥库分配密码
Java文档处理工具(jar)
如果要对代码签名,需要先用 jar 将其打包,然后用jarsigner 来签名, 命令的基本格式是jar cf jar-file input-file(s)
Java 文档签名及验证工具 (jarsigner)
jarsigner 工具通过密钥库中的数据来对 jar 文件进行签名和认证;
策略编辑器 (policytool )
编辑系统的策略文件
使用代码签名
1.签名方大致流程如下所示 :
各个步骤通过前面的工具使用介绍,具体实现细节就不再描述了, 现在列出自己尝试时使用的几个命令:
² [ 生成私钥]keytool -genkey -alias signFiles -keypass 123456 -keystore store -storepass 123456
² [ 打包 ]jar cvf algrim.jar *.class
² [ 签名 ]jarsigner -keystore store -signedjar sAlgrim.jar Algrim.jar signFiles
² [生成证书] keytool -export -keystore store -alias signFiles -file cer.cer
2.接收方大致流程如下所示 :
直接运行代码是不允许的,只有先将证书引入本地的 keystore , 作为信任的证书插入;通过使用 Policy Tool 来配置相应的策略文件,通过两种方式来运行他:
1. 用 java -Djava.security.manager -Djava.security.policy= raypolicy -cp sCount.jar AppName 的形式
2. 通过配置浏览器使用的j ava.home\lib\security\java.security 文件,就可以带安全检查地运行该程序。
文件交换
在发送文件时,可以通过数字签名来保证文件的一致性和发送者的身份。步骤如下 :
发送者[基本流程同代码签名是一样的]
接收者
与代码签名的不同之处在于是通过 jarsigner 来验证的。
使用 JDK 1.2 的API 来构造自己的例程
基础 API
产生公钥和密钥对
² [ 得到密钥产生器]KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
² [ 初始化密钥产生器] SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); keyGen.initialize(1024, random);
² [产生公钥和密钥] KeyPair pair = keyGen.generateKeyPair();PrivateKey priv = pair.getPrivate(); PublicKey pub = pair.getPublic();
对数据签名
² [ 得到一个签名对象] Signature dsa = Signature.getInstance("SHA1withDSA", "SUN");
² [初始化签名对象] dsa.initSign(priv);
² [对数据签名 ] dsa.update(buffer, 0, len);
² [得到签名的数据] byte[] realSig = dsa.sign();
存储签名和公钥
² 签名结果直接按字节流存储
² 公钥通过pub.getEncoded(); 先转换为字节流来处理
从文件中取得公钥
² 先从文件中读到字节流中 à encKey
² [构造一个密钥说明类] X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);
² [构造一个密钥管理器] KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");
² [取得公钥] PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);
RSS订阅






收 藏
推 荐