package ssi.peeno.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PublicKey;
import java.security.Security;
import java.security.SignatureException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Date;
import org.bouncycastle.asn1.x509.X509Name;
import org.bouncycastle.x509.X509V1CertificateGenerator;
public class KeyStoreTest {
@SuppressWarnings("deprecation")
public static void main(String args[]) {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
String pwd = "pwd";
String keyStoreFile = "keyStore.bin";
FileInputStream fin = null;
FileOutputStream fout = null;
KeyPairGenerator kpg = null;
X509V1CertificateGenerator certGen = null;
X509Certificate cert = null;
try {
kpg = KeyPairGenerator.getInstance("RSA", "BC");
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (NoSuchProviderException e1) {
e1.printStackTrace();
}
kpg.initialize(1024);
KeyPair pair = kpg.generateKeyPair();
try {
fout = new FileOutputStream(keyStoreFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
certGen = new X509V1CertificateGenerator();
certGen.setPublicKey(pair.getPublic());
certGen.setSerialNumber(new BigInteger("123098273987612873618792638"));
X509Name name = new X509Name("C=IT EmailAddress=kamei86i@gmail.com");
certGen.setIssuerDN(name);
certGen.setSubjectDN(name);
certGen.setNotBefore(new Date());
Date afterDate = new Date();
afterDate.setYear(2020);
certGen.setNotAfter(afterDate);
certGen.setSignatureAlgorithm("SHA1WithRSA");
cert = certGen.generate(pair.getPrivate(), "BC");
} catch (CertificateException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (SignatureException e) {
e.printStackTrace();
}
KeyStore ks = null;
try {
ks = KeyStore.getInstance("JCEKS");
ks.load(null, pwd.toCharArray());
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
ks.setKeyEntry("server", pair.getPrivate(), pwd.toCharArray() , new Certificate[] { cert });
ks.setCertificateEntry("userP1", cert);
} catch (KeyStoreException e) {
e.printStackTrace();
}
try {
ks.store(fout, pwd.toCharArray());
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
X509Certificate certLoad = null;
try {
certLoad = (X509Certificate) ks.getCertificate("server");
} catch (KeyStoreException e) {
e.printStackTrace();
}
PublicKey k = certLoad.getPublicKey();
System.out.println("Created: " + pair.getPublic().toString());
System.out.println("Loaded: " + k.toString());
try {
System.out.println("OnlyCertificate Loaded: " + ks.getCertificate("userP1").getPublicKey().toString());
} catch (KeyStoreException e) {
e.printStackTrace();
}
try {
fout.flush();
fout.close();
} catch (IOException e) {
e.printStackTrace();
}
//Read only
System.out.println("-----------------ReadOnly---------------");
KeyStore ks1 = null;
try {
fin = new FileInputStream(keyStoreFile);
ks1 = KeyStore.getInstance("JCEKS");
ks1.load(fin, pwd.toCharArray());
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
X509Certificate certLoad1 = null;
try {
certLoad1 = (X509Certificate) ks1.getCertificate("server");
} catch (KeyStoreException e) {
e.printStackTrace();
}
PublicKey k1 = certLoad1.getPublicKey();
System.out.println("Loaded: " + k1.toString());
try {
System.out.println("OnlyCertificate Loaded: " + ks1.getCertificate("userP1").getPublicKey().toString());
} catch (KeyStoreException e) {
e.printStackTrace();
}
try {
fin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
|