/**
* Demo of a generation of a X509 Self Signed Certificate using <a
* href="http://www.bouncycastle.org/">Bouncy Castle</a> library. 您的姓名是什么?
*
* commonName (CN)
*
* 运行代理的服务器的全限定名称 *
* mqserver.sun.com
*
* 您所在部门的名称是什么?
*
* organizationalUnit (OU)
*
* 部门或分部的名称 *
* purchasing
*
* 您的工作单位的名称是什么?
*
* organizationName (ON)
*
* 大型工作单位的名称,如公司或政府机构 *
* My Company, Inc.
*
* 您所在城市或地区的名称是什么?
*
* localityName (L)
*
* 城市或地区的名称 *
* San Francisco
*
* 您所在州或省的名称是什么?
*
* stateName (ST)
*
* 州或省的全称,不要使用缩写 *
* California
*
* 此单位的两字母国家/地区代码是什么?
*
* country (C)
*
* 标准两字母国家/地区代码 *
* US
*
* <a href="mailto:cyrille@cyrilleleclerc.com">Cyrille Le Clerc</a>
*/
public class SelfSignedX509CertificateGeneratorDemo {
static {
// adds the Bouncy castle provider to java security
Security.addProvider(new BouncyCastleProvider());
}
/**
* <p>
* Generate a self signed X509 certificate .
* </p>
* <p>
* TODO : do the same with
* { org.bouncycastle.cert.X509v1CertificateBuilder} instead of the
* deprecated { org.bouncycastle.x509.X509V1CertificateGenerator}.
* </p>
*/
@SuppressWarnings("deprecation")
static void generateSelfSignedX509Certificate() throws NoSuchAlgorithmException, NoSuchProviderException, CertificateEncodingException,
SignatureException, InvalidKeyException, IOException {
// yesterday
Date validityBeginDate = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000);
// in 2 years
Date validityEndDate = new Date(System.currentTimeMillis() + 2 * 365 * 24 * 60 * 60 * 1000);
// GENERATE THE PUBLIC/PRIVATE RSA KEY PAIR
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC");
keyPairGenerator.initialize(1024, new SecureRandom());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// GENERATE THE X509 CERTIFICATE
X509V1CertificateGenerator certGen = new X509V1CertificateGenerator();
X500Principal dnName = new X500Principal("CN=John Doe");
certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
certGen.setSubjectDN(dnName);
certGen.setIssuerDN(dnName); // use the same
certGen.setNotBefore(validityBeginDate);
certGen.setNotAfter(validityEndDate);
certGen.setPublicKey(keyPair.getPublic());
certGen.setSignatureAlgorithm("SHA256WithRSAEncryption");
X509Certificate cert = certGen.generate(keyPair.getPrivate(), "BC");
System.out.println();
PEMWriter pemWriter = new PEMWriter(new PrintWriter(System.out));
pemWriter.writeObject(cert);
pemWriter.flush();
System.out.println();
System.out.println();
pemWriter.writeObject(keyPair.getPrivate());
pemWriter.flush();
System.out.println();
}
public static void main(String[] args) {
try {
generateSelfSignedX509Certificate();
} catch (Exception e) {
e.printStackTrace();
}
}
}