⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 certpathvalidatorutilities.java

📁 kmlnjlkj nlkjlkjkljl okopokipoipo oipipipo i
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
package org.bouncycastle.jce.provider;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.math.BigInteger;import java.security.GeneralSecurityException;import java.security.KeyFactory;import java.security.PublicKey;import java.security.cert.CertPath;import java.security.cert.CertPathValidatorException;import java.security.cert.CertStore;import java.security.cert.CertStoreException;import java.security.cert.Certificate;import java.security.cert.CertificateParsingException;import java.security.cert.PKIXParameters;import java.security.cert.PolicyQualifierInfo;import java.security.cert.TrustAnchor;import java.security.cert.X509CRL;import java.security.cert.X509CRLSelector;import java.security.cert.X509CertSelector;import java.security.cert.X509Certificate;import java.security.interfaces.DSAParams;import java.security.interfaces.DSAPublicKey;import java.security.spec.DSAPublicKeySpec;import java.text.ParseException;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.Enumeration;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import javax.security.auth.x500.X500Principal;import org.bouncycastle.asn1.ASN1InputStream;import org.bouncycastle.asn1.ASN1Object;import org.bouncycastle.asn1.ASN1OctetString;import org.bouncycastle.asn1.ASN1OutputStream;import org.bouncycastle.asn1.ASN1Sequence;import org.bouncycastle.asn1.DEREnumerated;import org.bouncycastle.asn1.DERGeneralizedTime;import org.bouncycastle.asn1.DERIA5String;import org.bouncycastle.asn1.DERObject;import org.bouncycastle.asn1.DERObjectIdentifier;import org.bouncycastle.asn1.DERSequence;import org.bouncycastle.asn1.isismtt.ISISMTTObjectIdentifiers;import org.bouncycastle.asn1.x509.AlgorithmIdentifier;import org.bouncycastle.asn1.x509.CRLDistPoint;import org.bouncycastle.asn1.x509.CRLNumber;import org.bouncycastle.asn1.x509.CRLReason;import org.bouncycastle.asn1.x509.CertificateList;import org.bouncycastle.asn1.x509.DistributionPoint;import org.bouncycastle.asn1.x509.DistributionPointName;import org.bouncycastle.asn1.x509.GeneralName;import org.bouncycastle.asn1.x509.GeneralNames;import org.bouncycastle.asn1.x509.PolicyInformation;import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;import org.bouncycastle.asn1.x509.X509Extensions;import org.bouncycastle.jce.X509LDAPCertStoreParameters;import org.bouncycastle.jce.exception.ExtCertPathValidatorException;import org.bouncycastle.util.Selector;import org.bouncycastle.util.StoreException;import org.bouncycastle.x509.ExtendedPKIXBuilderParameters;import org.bouncycastle.x509.ExtendedPKIXParameters;import org.bouncycastle.x509.X509AttributeCertStoreSelector;import org.bouncycastle.x509.X509AttributeCertificate;import org.bouncycastle.x509.X509CRLStoreSelector;import org.bouncycastle.x509.X509CertStoreSelector;import org.bouncycastle.x509.X509Store;public class CertPathValidatorUtilities{    protected static final String CERTIFICATE_POLICIES = X509Extensions.CertificatePolicies.getId();    protected static final String BASIC_CONSTRAINTS = X509Extensions.BasicConstraints.getId();    protected static final String POLICY_MAPPINGS = X509Extensions.PolicyMappings.getId();    protected static final String SUBJECT_ALTERNATIVE_NAME = X509Extensions.SubjectAlternativeName.getId();    protected static final String NAME_CONSTRAINTS = X509Extensions.NameConstraints.getId();    protected static final String KEY_USAGE = X509Extensions.KeyUsage.getId();    protected static final String INHIBIT_ANY_POLICY = X509Extensions.InhibitAnyPolicy.getId();    protected static final String ISSUING_DISTRIBUTION_POINT = X509Extensions.IssuingDistributionPoint.getId();    protected static final String DELTA_CRL_INDICATOR = X509Extensions.DeltaCRLIndicator.getId();    protected static final String POLICY_CONSTRAINTS = X509Extensions.PolicyConstraints.getId();    protected static final String FRESHEST_CRL = X509Extensions.FreshestCRL.getId();    protected static final String CRL_DISTRIBUTION_POINTS = X509Extensions.CRLDistributionPoints.getId();    protected static final String AUTHORITY_KEY_IDENTIFIER = X509Extensions.AuthorityKeyIdentifier.getId();    protected static final String ANY_POLICY = "2.5.29.32.0";        protected static final String CRL_NUMBER = X509Extensions.CRLNumber.getId();        /*     * key usage bits     */    protected static final int    KEY_CERT_SIGN = 5;    protected static final int    CRL_SIGN = 6;    protected static final String[] crlReasons = new String[] {        "unspecified",        "keyCompromise",        "cACompromise",        "affiliationChanged",        "superseded",        "cessationOfOperation",        "certificateHold",        "unknown",        "removeFromCRL",        "privilegeWithdrawn",        "aACompromise" };        /**     * Search the given Set of TrustAnchor's for one that is the     * issuer of the given X509 certificate. Uses the default provider     * for signature verification.     *     * @param cert the X509 certificate     * @param trustAnchors a Set of TrustAnchor's     *     * @return the <code>TrustAnchor</code> object if found or     * <code>null</code> if not.     *     * @exception AnnotatedException     *                if a TrustAnchor was found but the signature verification     *                on the given certificate has thrown an exception.     */    protected static TrustAnchor findTrustAnchor(        X509Certificate cert,        Set             trustAnchors)            throws AnnotatedException    {        return findTrustAnchor(cert, trustAnchors, null);    }        /**     * Search the given Set of TrustAnchor's for one that is the     * issuer of the given X509 certificate. Uses the specified     * provider for signature verification, or the default provider     * if null.     *     * @param cert the X509 certificate     * @param trustAnchors a Set of TrustAnchor's     * @param sigProvider the provider to use for signature verification     *     * @return the <code>TrustAnchor</code> object if found or     * <code>null</code> if not.     *     * @exception AnnotatedException     *                if a TrustAnchor was found but the signature verification     *                on the given certificate has thrown an exception.     */    protected static TrustAnchor findTrustAnchor(        X509Certificate cert,        Set             trustAnchors,        String          sigProvider)             throws AnnotatedException    {        TrustAnchor trust = null;        PublicKey trustPublicKey = null;        Exception invalidKeyEx = null;        X509CertSelector certSelectX509 = new X509CertSelector();        X500Principal certIssuer = getEncodedIssuerPrincipal(cert);        try        {            certSelectX509.setSubject(certIssuer.getEncoded());        }        catch (IOException ex)        {            throw new AnnotatedException("Cannot set subject search criteria for trust anchor.", ex);        }        Iterator iter = trustAnchors.iterator();        while (iter.hasNext() && trust == null)        {            trust = (TrustAnchor) iter.next();            if (trust.getTrustedCert() != null)            {                if (certSelectX509.match(trust.getTrustedCert()))                {                    trustPublicKey = trust.getTrustedCert().getPublicKey();                }                else                {                    trust = null;                }            }            else if (trust.getCAName() != null                    && trust.getCAPublicKey() != null)            {                try                {                    X500Principal caName = new X500Principal(trust.getCAName());                    if (certIssuer.equals(caName))                    {                        trustPublicKey = trust.getCAPublicKey();                    }                    else                    {                        trust = null;                    }                }                catch (IllegalArgumentException ex)                {                    trust = null;                }            }            else            {                trust = null;            }            if (trustPublicKey != null)            {                try                {                    verifyX509Certificate(cert, trustPublicKey, sigProvider);                }                catch (Exception ex)                {                    invalidKeyEx = ex;                    trust = null;                }            }        }        if (trust == null && invalidKeyEx != null)        {            throw new AnnotatedException("TrustAnchor found but certificate validation failed.", invalidKeyEx);        }        return trust;    }    protected static void addAdditionalStoresFromAltNames(            X509Certificate cert,            ExtendedPKIXParameters pkixParams)            throws CertificateParsingException    {        // if in the IssuerAltName extension an URI        // is given, add an additinal X.509 store        if (cert.getIssuerAlternativeNames() != null)        {            Iterator it = cert.getIssuerAlternativeNames().iterator();            while (it.hasNext())            {                // look for URI                List list = (List) it.next();                if (list.get(0).equals(new Integer(GeneralName.uniformResourceIdentifier)))                {                    // found                    String temp = (String) list.get(1);                    CertPathValidatorUtilities.addAdditionalStoreFromLocation(temp, pkixParams);                }            }        }    }    /**     * Returns the issuer of an attribute certificate or certificate.     * @param cert The attribute certificate or certificate.     * @return The issuer as <code>X500Principal</code>.     */    protected static X500Principal getEncodedIssuerPrincipal(        Object cert)    {        if (cert instanceof X509Certificate)        {            return ((X509Certificate)cert).getIssuerX500Principal();        }        else        {            return (X500Principal)((X509AttributeCertificate)cert).getIssuer().getPrincipals()[0];        }    }    protected static Date getValidDate(PKIXParameters paramsPKIX)    {        Date validDate = paramsPKIX.getDate();        if (validDate == null)        {            validDate = new Date();        }        return validDate;    }    protected static X500Principal getSubjectPrincipal(X509Certificate cert)    {        return cert.getSubjectX500Principal();    }        protected static boolean isSelfIssued(X509Certificate cert)    {        return cert.getSubjectDN().equals(cert.getIssuerDN());    }            /**     * Extract the value of the given extension, if it exists.     *      * @param ext     *            The extension object.     * @param oid     *            The object identifier to obtain.     * @throws AnnotatedException     *             if the extension cannot be read.     */    protected static DERObject getExtensionValue(        java.security.cert.X509Extension    ext,        String                              oid)        throws AnnotatedException    {        byte[]  bytes = ext.getExtensionValue(oid);        if (bytes == null)        {            return null;        }        return getObject(oid, bytes);    }        private static DERObject getObject(            String oid,            byte[] ext)            throws AnnotatedException    {        try        {            ASN1InputStream aIn = new ASN1InputStream(ext);            ASN1OctetString octs = (ASN1OctetString)aIn.readObject();            aIn = new ASN1InputStream(octs.getOctets());            return aIn.readObject();        }        catch (Exception e)        {            throw new AnnotatedException("exception processing extension " + oid, e);        }    }        protected static X500Principal getIssuerPrincipal(X509CRL crl)    {        return crl.getIssuerX500Principal();    }        protected static AlgorithmIdentifier getAlgorithmIdentifier(        PublicKey key)        throws CertPathValidatorException    {        try        {            ASN1InputStream      aIn = new ASN1InputStream(key.getEncoded());            SubjectPublicKeyInfo info = SubjectPublicKeyInfo.getInstance(aIn.readObject());            return info.getAlgorithmId();        }        catch (Exception e)        {            throw new ExtCertPathValidatorException("Subject public key cannot be decoded.", e);        }    }        // crl checking    /**     * Return a Collection of all CRLs found in the X509Store's that are     * matching the crlSelect criteriums.     *     * @param crlSelect a {@link X509CRLStoreSelector} object that will be used

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -