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

📄 certtools.java

📁 一个免费的CA,基于EJB平台的,老师叫我们测试,现把之共享出来让大家参考
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        log.debug("<getEmailFromDN(" + dn + "): " + ret.size());        return ret;    }        /**     * Search for e-mail address, first in SubjectAltName (as in PKIX     * recomandation) then in subject DN.     * Original author: Marco Ferrante, (c) 2005 CSITA - University of Genoa (Italy)     *      * @param certificate     * @return subject email or null if not present in certificate     */    public static String getEMailAddress(X509Certificate certificate) {        log.debug("Searching for EMail Address in SubjectAltName");        if (certificate == null) {            return null;        }        try {            if (certificate.getSubjectAlternativeNames() != null) {                java.util.Collection altNames = certificate.getSubjectAlternativeNames();                Iterator iter = altNames.iterator();                while (iter.hasNext()) {                    java.util.List item = (java.util.List)iter.next();                    Integer type = (Integer)item.get(0);                    if (type.intValue() == 1) {                        return (String)item.get(1);                    }                }            }        } catch (CertificateParsingException e) {            log.error("Error parsing certificate: ", e);        }        log.debug("Searching for EMail Address in Subject DN");        ArrayList emails = CertTools.getEmailFromDN(certificate.getSubjectDN().getName());        if (emails.size() > 0) {        	return (String)emails.get(0);        }        return null;    }        /**     * Takes a DN and reverses it completely so the first attribute ends up last.      * C=SE,O=Foo,CN=Bar becomes CN=Bar,O=Foo,C=SE.     *     * @param dn String containing DN to be reversed, The DN string has the format "C=SE, O=xx, OU=yy, CN=zz".     *     * @return String containing reversed DN     */    public static String reverseDN(String dn) {        log.debug(">reverseDN: dn: " + dn);        String ret = null;        if (dn != null) {            String o;            BasicX509NameTokenizer xt = new BasicX509NameTokenizer(dn);            StringBuffer buf = new StringBuffer();            boolean first = true;            while (xt.hasMoreTokens()) {                o = xt.nextToken();                //log.debug("token: "+o);                if (!first) {                	buf.insert(0,",");                } else {                    first = false;                	                }                buf.insert(0,o);            }            if (buf.length() > 0) {            	ret = buf.toString();            }        }                log.debug("<reverseDN: resulting dn: " + ret);        return ret;    } //reverseDN    /**     * Tries to determine if a DN is in reversed form. It does this by taking the last attribute      * and the first attribute. If the last attribute comes before the first in the dNObjects array     * the DN is assumed to be in reversed order.     * The check if a DN is revered is relative to the default ordering, so if the default ordering is:     * "C=SE, O=PrimeKey, CN=Tomas" (dNObjectsReverse ordering in EJBCA) a dn or form "CN=Tomas, O=PrimeKey, C=SE" is reversed.     *      * if the default ordering is:     * "CN=Tomas, O=PrimeKey, C=SE" (dNObjectsForward ordering in EJBCA) a dn or form "C=SE, O=PrimeKey, CN=Tomas" is reversed.     *      *     * @param dn String containing DN to be checked, The DN string has the format "C=SE, O=xx, OU=yy, CN=zz".     *     * @return true if the DN is believed to be in reversed order, false otherwise     */    protected static boolean isDNReversed(String dn) {        //log.debug(">isDNReversed: dn: " + dn);        boolean ret = false;        if (dn != null) {            String first = null;            String last = null;            X509NameTokenizer xt = new X509NameTokenizer(dn);            if (xt.hasMoreTokens()) {            	first = xt.nextToken();            }            while (xt.hasMoreTokens()) {                last = xt.nextToken();            }            String[] dNObjects = DnComponents.getDnObjects();            if ( (first != null) && (last != null) ) {            	first = first.substring(0,first.indexOf('='));            	last = last.substring(0,last.indexOf('='));            	int firsti = 0, lasti = 0;            	for (int i = 0; i < dNObjects.length; i++) {            		if (first.toLowerCase().equals(dNObjects[i])) {            			firsti = i;            		}            		if (last.toLowerCase().equals(dNObjects[i])) {            			lasti = i;            		}            	}            	if (lasti < firsti) {            		ret = true;            	}            	            }        }        //log.debug("<isDNReversed: " + ret);        return ret;    } //isDNReversed    /**     * Gets a specified part of a DN. Specifically the first occurrence it the DN contains several     * instances of a part (i.e. cn=x, cn=y returns x).     *     * @param dn String containing DN, The DN string has the format "C=SE, O=xx, OU=yy, CN=zz".     * @param dnpart String specifying which part of the DN to get, should be "CN" or "OU" etc.     *     * @return String containing dnpart or null if dnpart is not present     */    public static String getPartFromDN(String dn, String dnpart) {        log.debug(">getPartFromDN: dn:'" + dn + "', dnpart=" + dnpart);        String part = null;        if ((dn != null) && (dnpart != null)) {            String o;            dnpart += "="; // we search for 'CN=' etc.            X509NameTokenizer xt = new X509NameTokenizer(dn);            while (xt.hasMoreTokens()) {                o = xt.nextToken();                //log.debug("checking: "+o.substring(0,dnpart.length()));                if ((o.length() > dnpart.length()) &&                        o.substring(0, dnpart.length()).equalsIgnoreCase(dnpart)) {                    part = o.substring(dnpart.length());                    break;                }            }        }        log.debug("<getpartFromDN: resulting DN part=" + part);        return part;    } //getPartFromDN    /**	 * Gets a specified parts of a DN. Returns all occurences as an ArrayList, also works if DN contains several	 * instances of a part (i.e. cn=x, cn=y returns {x, y, null}).	 *	 * @param dn String containing DN, The DN string has the format "C=SE, O=xx, OU=yy, CN=zz".	 * @param dnpart String specifying which part of the DN to get, should be "CN" or "OU" etc.	 *	 * @return ArrayList containing dnparts or empty list if dnpart is not present	 */	public static ArrayList getPartsFromDN(String dn, String dnpart) {		log.debug(">getPartsFromDN: dn:'" + dn + "', dnpart=" + dnpart);		ArrayList parts = new ArrayList();		if ((dn != null) && (dnpart != null)) {			String o;			dnpart += "="; // we search for 'CN=' etc.			X509NameTokenizer xt = new X509NameTokenizer(dn);			while (xt.hasMoreTokens()) {				o = xt.nextToken();				if ((o.length() > dnpart.length()) &&						o.substring(0, dnpart.length()).equalsIgnoreCase(dnpart)) {					parts.add(o.substring(dnpart.length()));				}			}		}		log.debug("<getpartsFromDN: resulting DN part=" + parts.toString());		return parts;	} //getPartFromDN    /**	 * Gets a list of all custom OIDs defined in the string. A custom OID is defined as an OID, simply as that. Otherwise, if it is not a custom oid, the DNpart is defined by a name such as CN och rfc822Name.	 *	 * @param dn String containing DN, The DN string has the format "C=SE, O=xx, OU=yy, CN=zz", or "rfc822Name=foo@bar.com", etc.	 * @param dnpart String specifying which part of the DN to get, should be "CN" or "OU" etc.	 *	 * @return ArrayList containing oids or empty list if no custom OIDs are present	 */	public static ArrayList getCustomOids(String dn) {		log.debug(">getCustomOids: dn:'" + dn);		ArrayList parts = new ArrayList();		if (dn != null) {			String o;			X509NameTokenizer xt = new X509NameTokenizer(dn);			while (xt.hasMoreTokens()) {				o = xt.nextToken();				// Try to see if it is a valid OID				try {					int i = o.indexOf('=');					// An oid is never shorter than 3 chars and must start with 1.					if ( (i > 2) && (o.charAt(1) == '.') ) {						String oid = o.substring(0, i);						new DERObjectIdentifier(oid);						parts.add(oid);					}				} catch (IllegalArgumentException e) {					// Not a valid oid				}			}		}		log.debug("<getpartsFromDN: resulting DN part=" + parts.toString());		return parts;	} //getPartFromDN	/**     * Gets subject DN in the format we are sure about (BouncyCastle),supporting UTF8.     *     * @param cert X509Certificate     *     * @return String containing the subjects DN.     */    public static String getSubjectDN(X509Certificate cert) {        return getDN(cert, 1);    }    /**     * Gets issuer DN in the format we are sure about (BouncyCastle),supporting UTF8.     *     * @param cert X509Certificate     *     * @return String containing the issuers DN.     */    public static String getIssuerDN(X509Certificate cert) {        return getDN(cert, 2);    }    /**     * Gets subject or issuer DN in the format we are sure about (BouncyCastle),supporting UTF8.     *     * @param cert X509Certificate     * @param which 1 = subjectDN, anything else = issuerDN     *     * @return String containing the DN.     */    private static String getDN(X509Certificate cert, int which) {        //log.debug(">getDN("+which+")");        String dn = null;        if (cert == null) {            return dn;        }        try {            CertificateFactory cf = CertTools.getCertificateFactory();            X509Certificate x509cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(                        cert.getEncoded()));            //log.debug("Created certificate of class: " + x509cert.getClass().getName());            if (which == 1) {                dn = x509cert.getSubjectDN().toString();            } else {                dn = x509cert.getIssuerDN().toString();            }        } catch (CertificateException ce) {            log.error("CertificateException: ", ce);            return null;        }        //log.debug("<getDN("+which+"):"+dn);        return stringToBCDNString(dn);    } // getDN    /**     * Gets issuer DN for CRL in the format we are sure about (BouncyCastle),supporting UTF8.     *     * @param crl X509RL     *     * @return String containing the DN.     */    public static String getIssuerDN(X509CRL crl) {        //log.debug(">getIssuerDN(crl)");        String dn = null;        try {            CertificateFactory cf = CertTools.getCertificateFactory();            X509CRL x509crl = (X509CRL) cf.generateCRL(new ByteArrayInputStream(crl.getEncoded()));            //log.debug("Created certificate of class: " + x509crl.getClass().getName());            dn = x509crl.getIssuerDN().toString();        } catch (CRLException ce) {            log.error("CRLException: ", ce);            return null;        }        //log.debug("<getIssuerDN(crl):"+dn);        return stringToBCDNString(dn);    } // getIssuerDN        public static CertificateFactory getCertificateFactory() {        try {            return CertificateFactory.getInstance("X.509", "BC");        } catch (NoSuchProviderException nspe) {            log.error("NoSuchProvider: ", nspe);        } catch (CertificateException ce) {            log.error("CertificateException: ", ce);        }        return null;    }    public static synchronized void removeBCProvider() {

⌨️ 快捷键说明

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