java生成RAS证书文件

原创
2013/07/30 10:28
阅读数 821
/**
 * 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
 *
 * @author <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
     * { @link org.bouncycastle.cert.X509v1CertificateBuilder} instead of the
     * deprecated { @link 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();
        }


    }
}

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部