资源简介

实现java代码生成cer证书文件,然后可以通过代码获取 不通过keytool工具。生成密钥对。使用公钥加密。

资源截图

代码片段和文件信息

package com.ufida.ehr.sso.cert;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.Security;
import java.security.SignatureException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Date;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.x509.X509V1CertificateGenerator;

/**
 * 实现对证书的操作,生成证书,获取证书
 * @author Administrator
 *
 */
public class CertHandlers {
/**
 * 
 * @param pair 密钥对
 * @param bdate 有效期
 * @param edate 有效期
 * @param info 证书信息
 * @return
 * @throws InvalidKeyException
 * @throws NoSuchProviderException
 * @throws SignatureException
 */
@SuppressWarnings(“deprecation“)
public  X509Certificate generateV1Certificate(KeyPair pairDate bdateDate edateX500Principal info)
        throws InvalidKeyException NoSuchProviderException SignatureException
    {
        // generate the certificate
     Security.addProvider(new BouncyCastleProvider());
        X509V1CertificateGenerator  certGen = new X509V1CertificateGenerator();
        certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
        certGen.setIssuerDN(info);
        certGen.setNotBefore(bdate);
        certGen.setNotAfter(edate);
        certGen.setSubjectDN(new X500Principal(“CN=Test Certificate“));
        certGen.setPublicKey(pair.getPublic());
        // i get error here
        certGen.setSignatureAlgorithm(“SHA256WithRSAEncryption“);
        return certGen.generateX509Certificate(pair.getPrivate() “BC“);
    }
   /**
    * * 生成证书文件
    * @param address 文件保存的路径
    * @param bdate 有效期
    * @param edate 有效期
    * @param info 证书信息
    * @param algorithm 算法名称
    * @param keysize 密钥长度
    * @param random 随机源
    * @throws Exception
    */
    
    public void ProCert(String addressDate bdateDate edateX500Principal infoString algorithmint keysize SecureRandom random)throws Exception{
        // create the keys
     KeyGen pc = new KeyGen();
KeyPair kp = pc.getKeyPair(algorithm keysize random);
        // generate the certificate
        X509Certificate cert = generateV1Certificate(kpbdateedateinfo);
        // show some basic validation
        cert.checkValidity(new Date());
        cert.verify(cert.getPublicKey());
        FileOutputStream o = new FileOutputStream(address);
        Writer wr = new OutputStreamWriter(o Charset.forName(“UTF-8“));
        wr.write(“-----BEGIN CERTIFICATE-----\n“);
        wr.write(new sun.misc.base64Encode

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3948  2011-10-27 09:16  cert\CertHandlers.java

     文件       1402  2011-10-27 09:18  cert\KeyGen.java

     文件        816  2011-10-27 09:26  cert\test.java

     目录          0  2011-10-27 09:20  cert

----------- ---------  ---------- -----  ----

                 6166                    4


评论

共有 条评论