一需要包含的包 import java
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18: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为条目的别名
四:JAV A程序中显示证书指定信息
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 五:JAV A程序列出密钥库所有条目 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()); 六:JAV A程序修改密钥库口令 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(); 七:JAV A程序修改密钥库条目的口令及添加条目 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对象内容写入新文件 八:JAV A程序检验别名和删除条目 FileInputStream in=new FileInputStream(".keystore"); KeyStore ks=KeyStore.getInstance("JKS"); ks.load(in,storepass.toCharArray()); ks.containsAlias("sage");检验条目是否在密钥库中,存在返回true ks.deleteEntry("sage");删除别名对应的条目 FileOutputStream output=new FileOutputStream(".keystore"); ks.store(output,storepass.toCharArray())将keystore对象内容写入文件,条目删除成功 九:JA V A程序签发数字证书 (1)从密钥库中读取CA的证书 FileInputStream in=new FileInputStream(".keystore"); KeyStore ks=KeyStore.getInstance("JKS");