📄 x509ca.java
字号:
/************************************************************************* * * * EJBCA: The OpenSource Certificate Authority * * * * This software is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or any later version. * * * * See terms of license at gnu.org. * * * *************************************************************************/ package se.anatom.ejbca.ca.caadmin;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.math.BigInteger;import java.security.KeyPair;import java.security.NoSuchProviderException;import java.security.PrivateKey;import java.security.PublicKey;import java.security.cert.CRL;import java.security.cert.CertStore;import java.security.cert.Certificate;import java.security.cert.CollectionCertStoreParameters;import java.security.cert.X509CRL;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.StringTokenizer;import java.util.Vector;import org.apache.log4j.Logger;import org.bouncycastle.asn1.ASN1EncodableVector;import org.bouncycastle.asn1.ASN1InputStream;import org.bouncycastle.asn1.ASN1Sequence;import org.bouncycastle.asn1.DEREncodableVector;import org.bouncycastle.asn1.DERIA5String;import org.bouncycastle.asn1.DERObject;import org.bouncycastle.asn1.DERObjectIdentifier;import org.bouncycastle.asn1.DEROctetString;import org.bouncycastle.asn1.DERSequence;import org.bouncycastle.asn1.DERTaggedObject;import org.bouncycastle.asn1.DERUTF8String;import org.bouncycastle.asn1.x509.AuthorityInformationAccess;import org.bouncycastle.asn1.x509.AuthorityKeyIdentifier;import org.bouncycastle.asn1.x509.BasicConstraints;import org.bouncycastle.asn1.x509.CRLDistPoint;import org.bouncycastle.asn1.x509.CRLNumber;import org.bouncycastle.asn1.x509.DistributionPoint;import org.bouncycastle.asn1.x509.DistributionPointName;import org.bouncycastle.asn1.x509.ExtendedKeyUsage;import org.bouncycastle.asn1.x509.GeneralName;import org.bouncycastle.asn1.x509.GeneralNames;import org.bouncycastle.asn1.x509.PolicyInformation;import org.bouncycastle.asn1.x509.SubjectKeyIdentifier;import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;import org.bouncycastle.asn1.x509.X509Extensions;import org.bouncycastle.asn1.x509.X509Name;import org.bouncycastle.asn1.x509.X509ObjectIdentifiers;import org.bouncycastle.cms.CMSEnvelopedData;import org.bouncycastle.cms.CMSEnvelopedDataGenerator;import org.bouncycastle.cms.CMSProcessable;import org.bouncycastle.cms.CMSProcessableByteArray;import org.bouncycastle.cms.CMSSignedData;import org.bouncycastle.cms.CMSSignedDataGenerator;import org.bouncycastle.cms.RecipientInformation;import org.bouncycastle.cms.RecipientInformationStore;import org.bouncycastle.jce.X509KeyUsage;import org.bouncycastle.ocsp.BasicOCSPResp;import org.bouncycastle.ocsp.BasicOCSPRespGenerator;import org.bouncycastle.ocsp.OCSPException;import org.bouncycastle.util.encoders.Hex;import se.anatom.ejbca.SecConst;import se.anatom.ejbca.ca.caadmin.extendedcaservices.ExtendedCAServiceNotActiveException;import se.anatom.ejbca.ca.caadmin.extendedcaservices.ExtendedCAServiceRequest;import se.anatom.ejbca.ca.caadmin.extendedcaservices.ExtendedCAServiceRequestException;import se.anatom.ejbca.ca.caadmin.extendedcaservices.ExtendedCAServiceResponse;import se.anatom.ejbca.ca.caadmin.extendedcaservices.IllegalExtendedCAServiceRequestException;import se.anatom.ejbca.ca.caadmin.extendedcaservices.OCSPCAServiceRequest;import se.anatom.ejbca.ca.caadmin.extendedcaservices.OCSPCAServiceResponse;import se.anatom.ejbca.ca.crl.RevokedCertInfo;import se.anatom.ejbca.ca.exception.CATokenOfflineException;import se.anatom.ejbca.ca.exception.IllegalKeyStoreException;import se.anatom.ejbca.ca.exception.SignRequestSignatureException;import se.anatom.ejbca.ca.sign.SernoGenerator;import se.anatom.ejbca.ca.store.certificateprofiles.CertificateProfile;import se.anatom.ejbca.common.UserDataVO;import se.anatom.ejbca.util.CertTools;import se.anatom.ejbca.util.StringTools;/** * X509CA is a implementation of a CA and holds data specific for Certificate and CRL generation * according to the X509 standard. * * @version $Id: X509CA.java,v 1.41.2.4 2005/11/24 21:16:37 herrvendil Exp $ */public class X509CA extends CA implements Serializable { private static Logger log = Logger.getLogger(X509CA.class); // Default Values public static final float LATEST_VERSION = 1; private X509Name subjectx509name = null; private byte[] keyId = new byte[] { 1, 2, 3, 4, 5 }; // protected fields. protected static final String POLICYID = "policyid"; protected static final String SUBJECTALTNAME = "subjectaltname"; protected static final String USEAUTHORITYKEYIDENTIFIER = "useauthoritykeyidentifier"; protected static final String AUTHORITYKEYIDENTIFIERCRITICAL = "authoritykeyidentifiercritical"; protected static final String USECRLNUMBER = "usecrlnumber"; protected static final String CRLNUMBERCRITICAL = "crlnumbercritical"; /** OID used for creating MS Templates */ protected static final String OID_MSTEMPLATE = "1.3.6.1.4.1.311.20.2"; // Public Methods /** Creates a new instance of CA, this constuctor should be used when a new CA is created */ public X509CA(X509CAInfo cainfo) { super(cainfo); data.put(POLICYID, cainfo.getPolicyId()); data.put(SUBJECTALTNAME, cainfo.getSubjectAltName()); setUseAuthorityKeyIdentifier(cainfo.getUseAuthorityKeyIdentifier()); setAuthorityKeyIdentifierCritical(cainfo.getAuthorityKeyIdentifierCritical()); setUseCRLNumber(cainfo.getUseCRLNumber()); setCRLNumberCritical(cainfo.getCRLNumberCritical()); setFinishUser(cainfo.getFinishUser()); data.put(CA.CATYPE, new Integer(CAInfo.CATYPE_X509)); data.put(VERSION, new Float(LATEST_VERSION)); } /** Constructor used when retrieving existing X509CA from database. */ public X509CA(HashMap data, CADataBean owner){ super(data, owner); } // Public Methods. public String getPolicyId(){ return (String) data.get(POLICYID);} public void setPolicyId(String policyid){ data.put(POLICYID, policyid);} public String getSubjectAltName() { return (String) data.get(SUBJECTALTNAME);} public boolean getUseAuthorityKeyIdentifier(){ return ((Boolean)data.get(USEAUTHORITYKEYIDENTIFIER)).booleanValue(); } public void setUseAuthorityKeyIdentifier(boolean useauthoritykeyidentifier) { data.put(USEAUTHORITYKEYIDENTIFIER, new Boolean(useauthoritykeyidentifier)); } public boolean getAuthorityKeyIdentifierCritical(){ return ((Boolean)data.get(AUTHORITYKEYIDENTIFIERCRITICAL)).booleanValue(); } public void setAuthorityKeyIdentifierCritical(boolean authoritykeyidentifiercritical) { data.put(AUTHORITYKEYIDENTIFIERCRITICAL, new Boolean(authoritykeyidentifiercritical)); } public boolean getUseCRLNumber(){return ((Boolean)data.get(USECRLNUMBER)).booleanValue();} public void setUseCRLNumber(boolean usecrlnumber) {data.put(USECRLNUMBER, new Boolean(usecrlnumber));} public boolean getCRLNumberCritical(){return ((Boolean)data.get(CRLNUMBERCRITICAL)).booleanValue();} public void setCRLNumberCritical(boolean crlnumbercritical) {data.put(CRLNUMBERCRITICAL, new Boolean(crlnumbercritical));} public void updateCA(CAInfo cainfo) throws Exception{ super.updateCA(cainfo); X509CAInfo info = (X509CAInfo) cainfo; setUseAuthorityKeyIdentifier(info.getUseAuthorityKeyIdentifier()); setAuthorityKeyIdentifierCritical(info.getAuthorityKeyIdentifierCritical()); setUseCRLNumber(info.getUseCRLNumber()); setCRLNumberCritical(info.getCRLNumberCritical()); } public CAInfo getCAInfo() throws Exception{ ArrayList externalcaserviceinfos = new ArrayList(); Iterator iter = getExternalCAServiceTypes().iterator(); while(iter.hasNext()){ externalcaserviceinfos.add(this.getExtendedCAServiceInfo(((Integer) iter.next()).intValue())); } return new X509CAInfo(getSubjectDN(), getName(), getStatus(), getSubjectAltName() ,getCertificateProfileId(), getValidity(), getExpireTime(), getCAType(), getSignedBy(), getCertificateChain(), getCAToken().getCATokenInfo(), getDescription(), getRevokationReason(), getRevokationDate(), getPolicyId(), getCRLPeriod(), getCRLPublishers(), getUseAuthorityKeyIdentifier(), getAuthorityKeyIdentifierCritical(), getUseCRLNumber(), getCRLNumberCritical(), getFinishUser(), externalcaserviceinfos); } public byte[] createPKCS7(Certificate cert, boolean includeChain) throws SignRequestSignatureException { // First verify that we signed this certificate try { if (cert != null) cert.verify(getCAToken().getPublicKey(SecConst.CAKEYPURPOSE_CERTSIGN), getCAToken().getProvider()); } catch (Exception e) { throw new SignRequestSignatureException("Cannot verify certificate in createPKCS7(), did I sign this?"); } Collection chain = getCertificateChain(); ArrayList certList = new ArrayList(); if (cert != null) { certList.add(cert); } if (includeChain) { certList.addAll(chain); } try { CMSProcessable msg = new CMSProcessableByteArray("EJBCA".getBytes()); CertStore certs = CertStore.getInstance("Collection", new CollectionCertStoreParameters(certList), "BC"); CMSSignedDataGenerator gen = new CMSSignedDataGenerator(); gen.addSigner(getCAToken().getPrivateKey(SecConst.CAKEYPURPOSE_CERTSIGN), (X509Certificate)getCACertificate(), CMSSignedDataGenerator.DIGEST_SHA1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -