接着,我们可以用上一步生成的 CA的自签证书来签名我这个数字证书了。
CA签名数字证书的过程需用以下程序来进行,这个程序是自解释的:
package com.security;
import java.io.*;
import java.security.*;
import java.security.cert.*;
import java.util.*;
import java.math.*;
import sun.security.x509.*;
/**
*<p>Description: 该程序根据签发者(CA)的证书信息(即CA的私钥)来对被签发者
*的证书进行签名,过程即是使用CA的证书和被签证书来重构形成一个新的证书</p>
* @author abnerchai
* @version 1.0
*/
publicclass SignCert {
publicstatic void main(String[] args) throws Exception{
char[] storepass = "100200".toCharArray();
//存放CA证书和被签证书的证书库的访问密码
char[] cakeypass = "200100".toCharArray();//CA数字证书条目的访问密码
String alias = "missionCA";
//CA证书在证书库中的别名,这个CA的证书用来签名其它的证书
String name = "abnerCALib";//存放CA证书和被签证书的证书库的名字
String newLib = "SignedLib";
//新证书库的名字,如果需要将签名后的证书放入新库,这是新库的名字
char[] newLibPass = "100200".toCharArray();//设置新库的访问密码
String cerFileName = "abnerCA.cer";//被签证书的证书文件名
String aliasName = "abnerCA";//被签证书在证书库中的alias别名
char[] namePass = "200100".toCharArray();
//被签证书的条目在证书库的私钥密码
int n =3;//被签证书的有效期,以年为单位,以当前时间开始计算
int sn = 200406001;
//序列号可自己定义,这里定义的意义为2004年6月签发,是本年度CA签发的第多少个以001计算,要求唯一
String afteraliasName = "abnerCA_Signed";
//签名后新产生的被签过名的证书在库中的别名
char[] afterNewPass = "200100".toCharArray();
//签名后新产生的被签过名的证书在库的条目的私钥的密码
//装载证书库
FileInputStreamin = new FileInputStream(name);
KeyStore ks = KeyStore.getInstance("JKS");//JKS为证书库的类型
ks.load(in,storepass);
//从证书库中读出签发者(CA)的证书
java.security.cert.Certificate cl = ks.getCertificate(alias);
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27683-5.html
成败在此一举