| « | January 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
| 公告 |
| 暂无公告... |
| Blog信息 |
|
blog名称:天地无用 日志总数:55 评论数量:43 留言数量:1 访问次数:196027 建立时间:2008年4月17日 |

| |
|
JAVA对数字证书的常用操作(转) 软件技术
kkk888929 发表于 2008/4/22 14:12:30 |
|
一需要包含的包
import java.security.*;import java.io.*;import java.util.*;import java.security.*;import java.security.cert.*;import sun.security.x509.*import java.security.cert.Certificate;import java.security.cert.CertificateFactory;
二 从文件中读取证书
用keytool将.keystore中的证书写入文件中,然后从该文件中读取证书信息CertificateFactory cf=CertificateFactory.getInstance("X.509");FileInputStream in=new FileInputStream("out.csr");Certificate c=cf.generateCertificate(in); String s=c.toString();
三 从密钥库中直接读取证书
String pass="123456";FileInputStream in=new FileInputStream(".keystore");KeyStore ks=KeyStore.getInstance("JKS");ks.load(in,pass.toCharArray());java.security.cert.Certificate c=ks.getCertificate(alias);//alias为条目的别名
四 JAVA程序中显示证书指定信息
System.out.println("输出证书信息:\n"+c.toString());System.out.println("版本号:"+t.getVersion());System.out.println("序列号:"+t.getSerialNumber().toString(16));System.out.println("主体名:"+t.getSubjectDN());System.out.println("签发者:"+t.getIssuerDN());System.out.println("有效期:"+t.getNotBefore());System.out.println("签名算法:"+t.getSigAlgName());byte [] sig=t.getSignature();//签名值PublicKey pk=t.getPublicKey();byte [] pkenc=pk.getEncoded();System.out.println("公钥");for(int i=0;i<pkenc.length;i++)System.out.print(pkenc[i]+",");
五 JAVA程序列出密钥库所有条目
String pass="123456";FileInputStream in=new FileInputStream(".keystore");KeyStore ks=KeyStore.getInstance("JKS");ks.load(in,pass.toCharArray());Enumeration e=ks.aliases();while(e.hasMoreElements())java.security.cert.Certificate c=ks.getCertificate((String)e.nextElement());
六 JAVA程序修改密钥库口令
String oldpass="123456";String newpass="654321";FileInputStream in=new FileInputStream(".keystore");KeyStore ks=KeyStore.getInstance("JKS");ks.load(in,oldpass.toCharArray());in.close();FileOutputStream output=new FileOutputStream(".keystore");ks.store(output,newpass.toCharArray());output.close();
七 JAVA程序修改密钥库条目的口令及添加条目
FileInputStream in=new FileInputStream(".keystore");KeyStore ks=KeyStore.getInstance("JKS");ks.load(in,storepass.toCharArray());Certificate [] cchain=ks.getCertificate(alias);获取别名对应条目的证书链PrivateKey pk=(PrivateKey)ks.getKey(alias,oldkeypass.toCharArray());获取别名对应条目的私钥ks.setKeyEntry(alias,pk,newkeypass.toCharArray(),cchain);向密钥库中添加条目第一个参数指定所添加条目的别名,假如使用已存在别名将覆盖已存在条目,使用新别名将增加一个新条目,第二个参数为条目的私钥,第三个为设置的新口令,第四个为该私钥的公钥的证书链FileOutputStream output=new FileOutputStream("another");ks.store(output,storepass.toCharArray())将keystore对象内容写入新文件
八 JAVA程序检验别名和删除条目
FileInputStream in=new FileInputStream(".keystore");KeyStore ks=KeyStore.getInstance("JKS");ks.load(in,storepass.toCharArray());ks.containsAlias("sage");检验条目是否在密钥库中,存在返回trueks.deleteEntry("sage");删除别名对应的条目FileOutputStream output=new FileOutputStream(".keystore");ks.store(output,storepass.toCharArray())将keystore对象内容写入文件,条目删除成功 |
|
|