package com.xgh.keystore.test;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.Date;
import junit.framework.TestCase;
import sun.security.x509.X509CertImpl;
public class JKSUtilTest extends TestCase{
/***
* 从jks密钥库容器中的密钥对中读取证书公钥
* @return
* @throws
*/
public X509Certificate testGetX509Certificate() throws Exception{
// 读取密钥是所要用到的工具类
KeyStore keystore = KeyStore.getInstance("JKS");
String strorePasswd= "111111";//密钥容器密码
String keyAlias="test";//证书别名
FileInputStream jksFileInputStream = new FileInputStream("src/test.jks");
// 读取公钥证书
keystore.load(jksFileInputStream, strorePasswd.toCharArray());
X509Certificate cert = (X509CertImpl)keystore.getCertificate(keyAlias);
//打印证书信息
printX509CertificateInfo(cert);
return cert;
}
/***
* 打印证书信息
* @param x509Cert
*/
public void printX509CertificateInfo(X509Certificate x509Cert){
System.out.println("证书主题:"+x509Cert.getSubjectDN().getName());
System.out.println("证书颁发者:" + x509Cert.getIssuerDN().getName());
System.out.println("证书序列号:" + x509Cert.getSerialNumber());
// 获得证书有效期
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd");
Date beforedate = x509Cert.getNotBefore();
System.out.println("证书生效日期:" + dateformat.format(beforedate));
Date afterdate = x509Cert.getNotAfter();
System.out.println("证书失效日期:" + dateformat.format(afterdate));
System.out.println("签名算法:" + x509Cert.getSigAlgName());
}
/***
* 从jks密钥库容器中的密钥对中读取证书公钥
* @return
* @throws
*/
public PublicKey testGetPublicKey() throws Exception{
// 读取密钥是所要用到的工具类
KeyStore keystore = KeyStore.getInstance("JKS");
String strorePasswd= "111111";//密钥容器密码
String keyAlias="test";//证书别名
FileInputStream jksFileInputStream = new FileInputStream("src/test.jks");
// 读取公钥
keystore.load(jksFileInputStream, strorePasswd.toCharArray());
Certificate cert = keystore.getCertificate(keyAlias);
System.out.println(cert.getClass());
// 公钥类所对应的类
PublicKey pubkey = cert.getPublicKey();
System.out.println("公钥为:");
System.out.println(pubkey);
System.out.println(new String(pubkey.getEncoded(),"UTF-8"));
return pubkey;
}
/***
* 从jks密钥库容器中的密钥对中读取证书私钥
* @return
* @throws
*/
public PrivateKey testGetPrivateKey() throws Exception{
// 读取密钥是所要用到的工具类
KeyStore keystore = KeyStore.getInstance("JKS");
String strorePasswd= "111111";//密钥容器密码
String keyAlias="test";//别名
String keyAliasPass="111111";//私钥密码
FileInputStream jksFileInputStream = new FileInputStream("src/test.jks");
// 读取公钥
keystore.load(jksFileInputStream, strorePasswd.toCharArray());
//通过别名和密码得到私钥
PrivateKey privatekey = (PrivateKey)keystore.getKey(keyAlias,keyAliasPass.toCharArray());
System.out.println("私钥为:");
System.out.println(privatekey);
return privatekey;
}
}