同步代码
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
package p12;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.math.BigInteger;
|
||||
import java.security.KeyPair;
|
||||
import java.security.KeyPairGenerator;
|
||||
import java.security.KeyStore;
|
||||
import java.security.cert.Certificate;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
import org.bouncycastle.asn1.x500.X500Name;
|
||||
import org.bouncycastle.cert.CertIOException;
|
||||
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
|
||||
import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder;
|
||||
import org.bouncycastle.operator.ContentSigner;
|
||||
import org.bouncycastle.operator.OperatorCreationException;
|
||||
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
|
||||
import org.bouncycastle.util.encoders.Hex;
|
||||
|
||||
public class StoreRSAKeyPairInPKCS12 {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
// --- generate a key pair (you did this already it seems)
|
||||
KeyPairGenerator rsaGen = KeyPairGenerator.getInstance("RSA");
|
||||
final KeyPair pair = rsaGen.generateKeyPair();
|
||||
|
||||
// --- create the self signed cert
|
||||
Certificate cert = createSelfSigned(pair);
|
||||
|
||||
// --- create a new pkcs12 key store in memory
|
||||
KeyStore pkcs12 = KeyStore.getInstance("PKCS12");
|
||||
pkcs12.load(null, null);
|
||||
|
||||
// --- create entry in PKCS12
|
||||
pkcs12.setKeyEntry("privatekeyalias", pair.getPrivate(), "entrypassphrase".toCharArray(), new Certificate[] {cert});
|
||||
|
||||
// --- store PKCS#12 as file
|
||||
try (FileOutputStream p12 = new FileOutputStream("mystore.p12")) {
|
||||
pkcs12.store(p12, "p12passphrase".toCharArray());
|
||||
}
|
||||
|
||||
// --- read PKCS#12 as file
|
||||
KeyStore testp12 = KeyStore.getInstance("PKCS12");
|
||||
try (FileInputStream p12 = new FileInputStream("mystore.p12")) {
|
||||
testp12.load(p12, "p12passphrase".toCharArray());
|
||||
}
|
||||
|
||||
// --- retrieve private key
|
||||
System.out.println(Hex.toHexString(testp12.getKey("privatekeyalias", "entrypassphrase".toCharArray()).getEncoded()));
|
||||
}
|
||||
|
||||
private static X509Certificate createSelfSigned(KeyPair pair) throws OperatorCreationException, CertIOException, CertificateException {
|
||||
X500Name dnName = new X500Name("CN=publickeystorageonly");
|
||||
BigInteger certSerialNumber = BigInteger.ONE;
|
||||
|
||||
Date startDate = new Date(); // now
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(startDate);
|
||||
calendar.add(Calendar.YEAR, 1);
|
||||
Date endDate = calendar.getTime();
|
||||
|
||||
ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256WithRSA").build(pair.getPrivate());
|
||||
JcaX509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(dnName, certSerialNumber, startDate, endDate, dnName, pair.getPublic());
|
||||
|
||||
return new JcaX509CertificateConverter().getCertificate(certBuilder.build(contentSigner));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user