目录
一、说明
最近在做一个项目,涉及到数字证书这一块的内容,其中有一个需求是,根据前端维护上送参数, 后台Java实现生成cer自签名证书,证书要求跟openssl命令生成的一样 ,我的java环境是JDK1.8。
网络--keytool CA签名SSL证书(收费)
网络--keytool自签名SSL证书(免费)以及私钥签名、公钥验签
二、实现代码
package com.justin.key;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.Security;
import java.security.SignatureException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.Date;
import java.util.HashMap;
import org.bouncycastle.asn1.x509.X509Name;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.x509.X509V3CertificateGenerator;
import sun.misc.BASE64Encoder;
/**
* Java代码生成自颁发 cer证书、base64 cer证书文件
* @author justin
*
*/
public class CreateCerFile {
private String path = "E:/";
private static String CTFC_DOMAIN_NAME = "domainName"; //CN:用户姓名或域名
private static String CTFC_ORG_UNIT_NAME = "orgUnitName"; //OU:组织单位名称
private static String CTFC_ORG_NAME = "orgName"; //O:组织名称
private static String CTFC_COUNTRY_CODE = "countryCode"; //C:单位的两字母国家代码
private static String CTFC_CITY = "city"; //L:城市或区域
private static String CTFC_PROVINCE = "province"; //ST:省份或州
private static String CTFC_VALID_START_TIME = "validStartTime"; //证书有效起始时间
private static String CTFC_VALID_END_TIME = "validEndTime"; //证书有效截止时间
private static String CTFC_SERIAL_NUMBER = "serialNumber"; //序列号域
private static String CTFC_SIG_AlG = "signatureAlgorithm"; //签名算法
private static String CTFC_ENCRYPT_TYPE = "encryptType"; //加密类型
private static String CTFC_ENCRYPT_NUM = "encryptNum"; //加密位数
private static String CTFC_PROVIDER = "provider"; //提供人