Example usage for org.bouncycastle.asn1.x500 RDN getFirst

List of usage examples for org.bouncycastle.asn1.x500 RDN getFirst

Introduction

In this page you can find the example usage for org.bouncycastle.asn1.x500 RDN getFirst.

Prototype

public AttributeTypeAndValue getFirst() 

Source Link

Usage

From source file:ca.trustpoint.m2m.M2mTrustAnchor.java

License:Apache License

/**
 * Creates a new instance./*  w  ww .j  av a  2 s  .  c o  m*/
 *
 * @param x509Certificate X.509 certificate to use as trust anchor.
 * @throws IllegalArgumentException if x509Certificate is null.
 */
public M2mTrustAnchor(X509Certificate x509Certificate) throws IllegalArgumentException {
    if (x509Certificate == null) {
        throw new IllegalArgumentException("x509Certificate cannot be null.");
    }

    X500Name x500Name = JcaX500NameUtil.getSubject(x509Certificate);
    EntityName caName = new EntityName();
    int attributeCount = 0;

    for (RDN rdn : x500Name.getRDNs()) {
        AttributeTypeAndValue attr = rdn.getFirst();
        EntityNameAttributeId attributeId;

        if (BCStyle.C.equals(attr.getType())) {
            attributeId = EntityNameAttributeId.Country;
        } else if (BCStyle.O.equals(attr.getType())) {
            attributeId = EntityNameAttributeId.Organization;
        } else if (BCStyle.OU.equals(attr.getType())) {
            attributeId = EntityNameAttributeId.OrganizationalUnit;
        } else if (BCStyle.DN_QUALIFIER.equals(attr.getType())) {
            attributeId = EntityNameAttributeId.DistinguishedNameQualifier;
        } else if (BCStyle.ST.equals(attr.getType())) {
            attributeId = EntityNameAttributeId.StateOrProvince;
        } else if (BCStyle.L.equals(attr.getType())) {
            attributeId = EntityNameAttributeId.Locality;
        } else if (BCStyle.CN.equals(attr.getType())) {
            attributeId = EntityNameAttributeId.CommonName;
        } else if (BCStyle.SN.equals(attr.getType())) {
            attributeId = EntityNameAttributeId.SerialNumber;
        } else if (BCStyle.DC.equals(attr.getType())) {
            attributeId = EntityNameAttributeId.DomainComponent;
        } else {
            // Unsupported attribute.
            continue;
        }

        caName.addAttribute(new EntityNameAttribute(attributeId, IETFUtils.valueToString(attr.getValue())));
        attributeCount++;

        if (attributeCount == EntityName.MAXIMUM_ATTRIBUTES) {
            // We have reached the maximum number of attributes for an EntityName, so stop here.
            break;
        }
    }

    this.caName = caName;
    this.publicKey = x509Certificate.getPublicKey();
    certificate = null;
}

From source file:com.aqnote.shared.cryptology.cert.util.CertificateUtil.java

License:Open Source License

public static String getValue(RDN rdn) {
    if (rdn == null)
        return null;
    return IETFUtils.valueToString(rdn.getFirst().getValue());
}

From source file:com.chiorichan.http.ssl.CertificateWrapper.java

License:Mozilla Public License

public String getCommonNameWithException() throws CertificateEncodingException {
    X500Name x500name = new JcaX509CertificateHolder(cert).getSubject();
    RDN cn = x500name.getRDNs(BCStyle.CN)[0];

    return IETFUtils.valueToString(cn.getFirst().getValue());
}

From source file:com.cordova.plugin.CertPlugin.java

License:Open Source License

private X509Certificate getX509CertificateFromP7cert(String p7cert) {
    try {/*  w ww  .j  a v  a2 s .co  m*/
        byte[] encapSigData = Base64.decode(p7cert, 0);
        //            ArrayList<X509Certificate> certList = new ArrayList<X509Certificate>();
        CMSSignedData s = new CMSSignedData(encapSigData);
        Store certStore = s.getCertificates();
        JcaX509CertificateConverter converter = new JcaX509CertificateConverter();
        @SuppressWarnings("unchecked")
        ArrayList<X509CertificateHolder> certificateHolders = (ArrayList<X509CertificateHolder>) certStore
                .getMatches(null);
        for (X509CertificateHolder holder : certificateHolders) {
            X509Certificate cert = converter.getCertificate(holder);

            X500Name x500Name = holder.getSubject();
            RDN[] rdns = x500Name.getRDNs(BCStyle.CN);
            RDN rdn = rdns[0];
            String name = IETFUtils.valueToString(rdn.getFirst().getValue());
            if (!name.contains("ROOT")) {
                //cn ?? ROOT ??
                return cert;
            }
            //                certList.add(cert);
        }
        return null;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

From source file:com.foilen.smalltools.crypt.bouncycastle.cert.RSACertificate.java

License:Open Source License

/**
 * Get the first certificate's common name.
 *
 * @return the common name/*from  w w w . j av  a2  s .c om*/
 */
public String getCommonName() {
    AssertTools.assertNotNull(certificateHolder, "The certificate is not set");
    X500Name subject = certificateHolder.getSubject();
    for (RDN rdn : subject.getRDNs()) {
        AttributeTypeAndValue first = rdn.getFirst();
        if (OID_COMMON_NAME.equals(first.getType().toString())) {
            return first.getValue().toString();
        }
    }
    return null;
}

From source file:com.google.bitcoin.protocols.payments.PaymentSession.java

License:Apache License

/**
 * Uses the provided PKI method to find the corresponding public key and verify the provided signature.
 * Returns null if no PKI method was specified in the {@link Protos.PaymentRequest}.
 *///  ww w. ja  va2  s.  co m
public @Nullable PkiVerificationData verifyPki() throws PaymentRequestException {
    try {
        if (pkiVerificationData != null)
            return pkiVerificationData;
        if (paymentRequest.getPkiType().equals("none"))
            // Nothing to verify. Everything is fine. Move along.
            return null;

        String algorithm;
        if (paymentRequest.getPkiType().equals("x509+sha256"))
            algorithm = "SHA256withRSA";
        else if (paymentRequest.getPkiType().equals("x509+sha1"))
            algorithm = "SHA1withRSA";
        else
            throw new PaymentRequestException.InvalidPkiType(
                    "Unsupported PKI type: " + paymentRequest.getPkiType());

        Protos.X509Certificates protoCerts = Protos.X509Certificates.parseFrom(paymentRequest.getPkiData());
        if (protoCerts.getCertificateCount() == 0)
            throw new PaymentRequestException.InvalidPkiData(
                    "No certificates provided in message: server config error");

        // Parse the certs and turn into a certificate chain object. Cert factories can parse both DER and base64.
        // The ordering of certificates is defined by the payment protocol spec to be the same as what the Java
        // crypto API requires - convenient!
        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        List<X509Certificate> certs = Lists.newArrayList();
        for (ByteString bytes : protoCerts.getCertificateList())
            certs.add((X509Certificate) certificateFactory.generateCertificate(bytes.newInput()));
        CertPath path = certificateFactory.generateCertPath(certs);

        // Retrieves the most-trusted CAs from keystore.
        PKIXParameters params = new PKIXParameters(createKeyStore(trustStorePath));
        // Revocation not supported in the current version.
        params.setRevocationEnabled(false);

        // Now verify the certificate chain is correct and trusted. This let's us get an identity linked pubkey.
        CertPathValidator validator = CertPathValidator.getInstance("PKIX");
        PKIXCertPathValidatorResult result = (PKIXCertPathValidatorResult) validator.validate(path, params);
        PublicKey publicKey = result.getPublicKey();
        // OK, we got an identity, now check it was used to sign this message.
        Signature signature = Signature.getInstance(algorithm);
        // Note that we don't use signature.initVerify(certs.get(0)) here despite it being the most obvious
        // way to set it up, because we don't care about the constraints specified on the certificates: any
        // cert that links a key to a domain name or other identity will do for us.
        signature.initVerify(publicKey);
        Protos.PaymentRequest.Builder reqToCheck = paymentRequest.toBuilder();
        reqToCheck.setSignature(ByteString.EMPTY);
        signature.update(reqToCheck.build().toByteArray());
        if (!signature.verify(paymentRequest.getSignature().toByteArray()))
            throw new PaymentRequestException.PkiVerificationException(
                    "Invalid signature, this payment request is not valid.");

        // Signature verifies, get the names from the identity we just verified for presentation to the user.
        final X509Certificate cert = certs.get(0);
        X500Principal principal = cert.getSubjectX500Principal();
        // At this point the Java crypto API falls flat on its face and dies - there's no clean way to get the
        // different parts of the certificate name except for parsing the string. That's hard because of various
        // custom escaping rules and the usual crap. So, use Bouncy Castle to re-parse the string into binary form
        // again and then look for the names we want. Fail!
        org.bouncycastle.asn1.x500.X500Name name = new X500Name(principal.getName());
        String entityName = null, orgName = null;
        for (RDN rdn : name.getRDNs()) {
            AttributeTypeAndValue pair = rdn.getFirst();
            if (pair.getType().equals(RFC4519Style.cn))
                entityName = ((ASN1String) pair.getValue()).getString();
            else if (pair.getType().equals(RFC4519Style.o))
                orgName = ((ASN1String) pair.getValue()).getString();
        }
        if (entityName == null && orgName == null) {
            // This cert might not be an SSL cert. Just grab the first "subject alt name" if present, e.g. for
            // S/MIME certs.
            final Iterator<List<?>> it = cert.getSubjectAlternativeNames().iterator();
            List<?> list;
            // email addresses have a type code of one.
            if (it.hasNext() && (list = it.next()) != null && (Integer) list.get(0) == 1)
                entityName = (String) list.get(1);
            if (entityName == null)
                throw new PaymentRequestException.PkiVerificationException(
                        "Could not extract name from certificate");
        }
        // Everything is peachy. Return some useful data to the caller.
        PkiVerificationData data = new PkiVerificationData(entityName, orgName, publicKey,
                result.getTrustAnchor());
        // Cache the result so we don't have to re-verify if this method is called again.
        pkiVerificationData = data;
        return data;
    } catch (InvalidProtocolBufferException e) {
        // Data structures are malformed.
        throw new PaymentRequestException.InvalidPkiData(e);
    } catch (CertificateException e) {
        // The X.509 certificate data didn't parse correctly.
        throw new PaymentRequestException.PkiVerificationException(e);
    } catch (NoSuchAlgorithmException e) {
        // Should never happen so don't make users have to think about it. PKIX is always present.
        throw new RuntimeException(e);
    } catch (InvalidAlgorithmParameterException e) {
        throw new RuntimeException(e);
    } catch (CertPathValidatorException e) {
        // The certificate chain isn't known or trusted, probably, the server is using an SSL root we don't
        // know about and the user needs to upgrade to a new version of the software (or import a root cert).
        throw new PaymentRequestException.PkiVerificationException(e);
    } catch (InvalidKeyException e) {
        // Shouldn't happen if the certs verified correctly.
        throw new PaymentRequestException.PkiVerificationException(e);
    } catch (SignatureException e) {
        // Something went wrong during hashing (yes, despite the name, this does not mean the sig was invalid).
        throw new PaymentRequestException.PkiVerificationException(e);
    } catch (IOException e) {
        throw new PaymentRequestException.PkiVerificationException(e);
    } catch (KeyStoreException e) {
        throw new RuntimeException(e);
    }
}

From source file:com.guardtime.ksi.trust.X509CertificateSubjectRdnSelector.java

License:Apache License

private boolean contains(X500Name name, RDN rdn) {
    RDN[] certificateRdnValues = name.getRDNs(rdn.getFirst().getType());
    for (RDN certRDN : certificateRdnValues) {
        if (certRDN.getFirst().getValue().equals(rdn.getFirst().getValue())) {
            return true;
        }//from w w w. j a  v a  2  s .c om
    }
    return false;
}

From source file:com.helger.peppol.as2client.AS2ClientHelper.java

License:Apache License

/**
 * @param aCert/*from w  w  w . jav a2 s .  co m*/
 *        Source certificate. May not be <code>null</code>.
 * @return The common name of the certificate subject
 * @throws CertificateEncodingException
 *         In case of an internal error
 */
@Nonnull
public static String getSubjectCommonName(@Nonnull final X509Certificate aCert)
        throws CertificateEncodingException {
    ValueEnforcer.notNull(aCert, "Certificate");
    final X500Name x500name = new JcaX509CertificateHolder(aCert).getSubject();
    final RDN cn = x500name.getRDNs(BCStyle.CN)[0];
    return IETFUtils.valueToString(cn.getFirst().getValue());
}

From source file:com.motorolamobility.studio.android.certmanager.ui.dialogs.CertificateInfoDialog.java

License:Apache License

private String printCertInfo(RDN certItem) {
    return certItem != null ? certItem.getFirst().getValue().toString()
            : CertificateManagerNLS.CertificateInfoDialog_NotAvailableProperty;
}

From source file:com.motorolamobility.studio.android.certmanager.ui.model.EntryNode.java

License:Apache License

/**
 * /* w  ww.j ava  2 s.com*/
 * @param keyStoreModel
 * @param alias
 * @throws KeyStoreManagerException
 *             if the alias is already listed in the tree
 */
public EntryNode(ITreeNode keyStoreModel, String alias) throws KeyStoreManagerException {
    this.alias = alias.toLowerCase();
    setParent(keyStoreModel);
    if (!isKeyPairEntry()) {
        keyStoreModel.addChild(this);
    }

    // notify key entry addition
    //        KeyStoreModelEventManager.getInstance().fireEvent(this, KeyStoreModelEvent.EventType.ADD);

    // Obtaining certificate to get tooltip information
    X509Certificate cert = getX509Certificate();
    if (cert != null) {
        X500Name x500name;
        try {
            x500name = new JcaX509CertificateHolder(cert).getSubject();

            RDN commonName = x500name.getRDNs(BCStyle.CN).length >= 1 ? x500name.getRDNs(BCStyle.CN)[0] : null;
            RDN organization = x500name.getRDNs(BCStyle.O).length >= 1 ? x500name.getRDNs(BCStyle.O)[0] : null;

            // Adding tooltip information
            String org = organization != null ? organization.getFirst().getValue().toString()
                    : CertificateManagerNLS.CertificateInfoDialog_NotAvailableProperty;
            String name = commonName != null ? commonName.getFirst().getValue().toString()
                    : CertificateManagerNLS.CertificateInfoDialog_NotAvailableProperty;
            this.setTooltip(NLS.bind(CertificateManagerNLS.CertificateBlock_KeyTooltip, org, name));
        } catch (CertificateEncodingException e) {
            String errorMsg = "Error getting data from certificate";
            StudioLogger.error(EntryNode.class, errorMsg, e);
            throw new KeyStoreManagerException(errorMsg, e);
        }
    }
}