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

📄 rfc3281certpathutilities.java

📁 kmlnjlkj nlkjlkjkljl okopokipoipo oipipipo i
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        if (acIssuerCert.getKeyUsage() != null            && (!acIssuerCert.getKeyUsage()[0] && !acIssuerCert.getKeyUsage()[1]))        {            throw new CertPathValidatorException(                "Attribute certificate issuer public key cannot be used to validate digital signatures.");        }        if (acIssuerCert.getBasicConstraints() != -1)        {            throw new CertPathValidatorException(                "Attribute certificate issuer is also a public key certificate issuer.");        }    }    protected static CertPathValidatorResult processAttrCert2(        CertPath certPath, ExtendedPKIXParameters pkixParams)        throws CertPathValidatorException    {        CertPathValidator validator = null;        try        {            validator = CertPathValidator.getInstance("PKIX", "BC");        }        catch (NoSuchProviderException e)        {            throw new ExtCertPathValidatorException(                "Support class could not be created.", e);        }        catch (NoSuchAlgorithmException e)        {            throw new ExtCertPathValidatorException(                "Support class could not be created.", e);        }        try        {            return validator.validate(certPath, pkixParams);        }        catch (CertPathValidatorException e)        {            throw new ExtCertPathValidatorException(                "Certification path for issuer certificate of attribute certificate could not be validated.",                e);        }        catch (InvalidAlgorithmParameterException e)        {            // must be a programming error            throw new RuntimeException(e.getMessage());        }    }    /**     * Searches for a holder public key certificate and verifies its     * certification path.     *      * @param attrCert the attribute certificate.     * @param pkixParams The PKIX parameters.     * @return The certificate path of the holder certificate.     * @throws AnnotatedException if     *             <ul>     *             <li>no public key certificate can be found although holder     *             information is given by an entity name or a base certificate     *             ID     *             <li>support classes cannot be created     *             <li>no certification path for the public key certificate can     *             be built     *             </ul>     */    protected static CertPath processAttrCert1(        X509AttributeCertificate attrCert, ExtendedPKIXParameters pkixParams)        throws CertPathValidatorException    {        CertPathBuilderResult result = null;        // find holder PKCs        Set holderPKCs = new HashSet();        if (attrCert.getHolder().getIssuer() != null)        {            X509CertStoreSelector selector = new X509CertStoreSelector();            selector.setSerialNumber(attrCert.getHolder().getSerialNumber());            Principal[] principals = attrCert.getHolder().getIssuer();            for (int i = 0; i < principals.length; i++)            {                try                {                    if (principals[i] instanceof X500Principal)                    {                        selector.setIssuer(((X500Principal)principals[i])                            .getEncoded());                    }                    holderPKCs.addAll(CertPathValidatorUtilities                        .findCertificates(selector, pkixParams.getStores()));                }                catch (AnnotatedException e)                {                    throw new ExtCertPathValidatorException(                        "Public key certificate for attribute certificate cannot be searched.",                        e);                }                catch (IOException e)                {                    throw new ExtCertPathValidatorException(                        "Unable to encode X500 principal.", e);                }            }            if (holderPKCs.isEmpty())            {                throw new CertPathValidatorException(                    "Public key certificate specified in base certificate ID for attribute certificate cannot be found.");            }        }        if (attrCert.getHolder().getEntityNames() != null)        {            X509CertStoreSelector selector = new X509CertStoreSelector();            Principal[] principals = attrCert.getHolder().getEntityNames();            for (int i = 0; i < principals.length; i++)            {                try                {                    if (principals[i] instanceof X500Principal)                    {                        selector.setIssuer(((X500Principal) principals[i])                            .getEncoded());                    }                    holderPKCs.addAll(CertPathValidatorUtilities                        .findCertificates(selector, pkixParams.getStores()));                }                catch (AnnotatedException e)                {                    throw new ExtCertPathValidatorException(                        "Public key certificate for attribute certificate cannot be searched.",                        e);                }                catch (IOException e)                {                    throw new ExtCertPathValidatorException(                        "Unable to encode X500 principal.", e);                }            }            if (holderPKCs.isEmpty())            {                throw new CertPathValidatorException(                    "Public key certificate specified in entity name for attribute certificate cannot be found.");            }        }        // verify cert paths for PKCs        ExtendedPKIXBuilderParameters params = (ExtendedPKIXBuilderParameters) ExtendedPKIXBuilderParameters            .getInstance(pkixParams);        CertPathValidatorException lastException = null;        for (Iterator it = holderPKCs.iterator(); it.hasNext();)        {            X509CertStoreSelector selector = new X509CertStoreSelector();            selector.setCertificate((X509Certificate) it.next());            params.setTargetConstraints(selector);            CertPathBuilder builder = null;            try            {                builder = CertPathBuilder.getInstance("PKIX", "BC");            }            catch (NoSuchProviderException e)            {                throw new ExtCertPathValidatorException(                    "Support class could not be created.", e);            }            catch (NoSuchAlgorithmException e)            {                throw new ExtCertPathValidatorException(                    "Support class could not be created.", e);            }            try            {                result = builder.build(ExtendedPKIXBuilderParameters                    .getInstance(params));            }            catch (CertPathBuilderException e)            {                lastException = new ExtCertPathValidatorException(                    "Certification path for public key certificate of attribute certificate could not be build.",                    e);            }            catch (InvalidAlgorithmParameterException e)            {                // must be a programming error                throw new RuntimeException(e.getMessage());            }        }        if (lastException != null)        {            throw lastException;        }        return result.getCertPath();    }    /**     *      * Checks a distribution point for revocation information for the     * certificate <code>attrCert</code>.     *      * @param dp The distribution point to consider.     * @param attrCert The attribute certificate which should be checked.     * @param paramsPKIX PKIX parameters.     * @param validDate The date when the certificate revocation status should     *            be checked.     * @param issuerCert Certificate to check if it is revoked.     * @param reasonMask The reasons mask which is already checked.     * @param certPathCerts The certificates of the certification path to be     *            checked.     * @throws AnnotatedException if the certificate is revoked or the status     *             cannot be checked or some error occurs.     */    private static void checkCRL(DistributionPoint dp,        X509AttributeCertificate attrCert, ExtendedPKIXParameters paramsPKIX,        Date validDate, X509Certificate issuerCert, CertStatus certStatus,        ReasonsMask reasonMask, List certPathCerts) throws AnnotatedException    {        /*         * 4.3.6 No Revocation Available         *          * The noRevAvail extension, defined in [X.509-2000], allows an AC         * issuer to indicate that no revocation information will be made         * available for this AC.         */        if (attrCert.getExtensionValue(X509Extensions.NoRevAvail.getId()) != null)        {            return;        }        Date currentDate = new Date(System.currentTimeMillis());        if (validDate.getTime() > currentDate.getTime())        {            throw new AnnotatedException("Validation time is in future.");        }        // (a)        /*         * We always get timely valid CRLs, so there is no step (a) (1).         * "locally cached" CRLs are assumed to be in getStore(), additional         * CRLs must be enabled in the ExtendedPKIXParameters and are in         * getAdditionalStore()         */        Set crls = CertPathValidatorUtilities.getCompleteCRLs(dp, attrCert,            currentDate, paramsPKIX);        boolean validCrlFound = false;        AnnotatedException lastException = null;        Iterator crl_iter = crls.iterator();        while (crl_iter.hasNext()            && certStatus.getCertStatus() == CertStatus.UNREVOKED            && !reasonMask.isAllReasons())        {            try            {                X509CRL crl = (X509CRL) crl_iter.next();                // (d)                ReasonsMask interimReasonsMask = RFC3280CertPathUtilities                    .processCRLD(crl, dp);                // (e)                /*                 * The reasons mask is updated at the end, so only valid CRLs                 * can update it. If this CRL does not contain new reasons it                 * must be ignored.                 */                if (!interimReasonsMask.hasNewReasons(reasonMask))                {                    continue;                }                // (f)                Set keys = RFC3280CertPathUtilities.processCRLF(crl, attrCert,                    null, null, paramsPKIX, certPathCerts);                // (g)                PublicKey key = RFC3280CertPathUtilities.processCRLG(crl, keys);                X509CRL deltaCRL = null;                if (paramsPKIX.isUseDeltasEnabled())                {                    // get delta CRLs                    Set deltaCRLs = CertPathValidatorUtilities.getDeltaCRLs(                        currentDate, paramsPKIX, crl);                    // we only want one valid delta CRL                    // (h)                    deltaCRL = RFC3280CertPathUtilities.processCRLH(deltaCRLs,                        key);                }                /*                 * CRL must be be valid at the current time, not the validation                 * time. If a certificate is revoked with reason keyCompromise,                 * cACompromise, it can be used for forgery, also for the past.                 * This reason may not be contained in older CRLs.                 */                /*                 * in the chain model signatures stay valid also after the                 * certificate has been expired, so they do not have to be in                 * the CRL vality time                 */                if (paramsPKIX.getValidityModel() != ExtendedPKIXParameters.CHAIN_VALIDITY_MODEL)                {                    /*                     * if a certificate has expired, but was revoked, it is not                     * more in the CRL, so it would be regarded as valid if the                     * first check is not done                     */                    if (attrCert.getNotAfter().getTime() < crl.getThisUpdate()                        .getTime())                    {                        throw new AnnotatedException(                            "No valid CRL for current time found.");                    }                }                RFC3280CertPathUtilities.processCRLB1(dp, attrCert, crl);                // (b) (2)                RFC3280CertPathUtilities.processCRLB2(dp, attrCert, crl);                // (c)                RFC3280CertPathUtilities.processCRLC(deltaCRL, crl, paramsPKIX);                // (i)                RFC3280CertPathUtilities.processCRLI(validDate, deltaCRL,                    attrCert, certStatus, paramsPKIX);                // (j)                RFC3280CertPathUtilities.processCRLJ(validDate, crl, attrCert,                    certStatus);                // (k)                if (certStatus.getCertStatus() == CRLReason.removeFromCRL)                {                    certStatus.setCertStatus(CertStatus.UNREVOKED);                }                // update reasons mask                reasonMask.addReasons(interimReasonsMask);                validCrlFound = true;            }            catch (AnnotatedException e)            {                lastException = e;            }        }        if (!validCrlFound)        {            throw lastException;        }    }}

⌨️ 快捷键说明

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