From 699e71e76b15081baf746c6ce9c9144f7e5f1ff9 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 30 Sep 2013 10:11:28 -0400 Subject: [PATCH] Trim trailing whitespace and organize imports --- src/main/java/com/gitblit/utils/X509Utils.java | 262 ++++++++++++++++++++++++++-------------------------- 1 files changed, 131 insertions(+), 131 deletions(-) diff --git a/src/main/java/com/gitblit/utils/X509Utils.java b/src/main/java/com/gitblit/utils/X509Utils.java index 237c8da..d3d5b46 100644 --- a/src/main/java/com/gitblit/utils/X509Utils.java +++ b/src/main/java/com/gitblit/utils/X509Utils.java @@ -89,43 +89,43 @@ /** * Utility class to generate X509 certificates, keystores, and truststores. - * + * * @author James Moger - * + * */ public class X509Utils { - + public static final String SERVER_KEY_STORE = "serverKeyStore.jks"; - + public static final String SERVER_TRUST_STORE = "serverTrustStore.jks"; public static final String CERTS = "certs"; - + public static final String CA_KEY_STORE = "certs/caKeyStore.p12"; public static final String CA_REVOCATION_LIST = "certs/caRevocationList.crl"; - + public static final String CA_CONFIG = "certs/authority.conf"; public static final String CA_CN = "Gitblit Certificate Authority"; - + public static final String CA_ALIAS = CA_CN; private static final String BC = org.bouncycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME; - + private static final int KEY_LENGTH = 2048; - + private static final String KEY_ALGORITHM = "RSA"; - + private static final String SIGNING_ALGORITHM = "SHA512withRSA"; - + public static final boolean unlimitedStrength; - + private static final Logger logger = LoggerFactory.getLogger(X509Utils.class); - + static { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); - + // check for JCE Unlimited Strength int maxKeyLen = 0; try { @@ -140,28 +140,28 @@ logger.info("Using JCE Standard Encryption Policy files, encryption key lengths will be limited"); } } - + public static enum RevocationReason { // https://en.wikipedia.org/wiki/Revocation_list unspecified, keyCompromise, caCompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold, unused, removeFromCRL, privilegeWithdrawn, ACompromise; - + public static RevocationReason [] reasons = { - unspecified, keyCompromise, caCompromise, - affiliationChanged, superseded, cessationOfOperation, + unspecified, keyCompromise, caCompromise, + affiliationChanged, superseded, cessationOfOperation, privilegeWithdrawn }; - + @Override public String toString() { return name() + " (" + ordinal() + ")"; } } - + public interface X509Log { void log(String message); } - + public static class X509Metadata { // map for distinguished name OIDs @@ -169,10 +169,10 @@ // CN in distingiushed name public final String commonName; - + // password for store public final String password; - + // password hint for README in bundle public String passwordHint; @@ -181,13 +181,13 @@ // start date of generated certificate public Date notBefore; - + // expiraiton date of generated certificate public Date notAfter; - + // hostname of server for which certificate is generated public String serverHostname; - + // displayname of user for README in bundle public String userDisplayname; @@ -213,7 +213,7 @@ notAfter = c.getTime(); oids = new HashMap<String, String>(); } - + public X509Metadata clone(String commonName, String password) { X509Metadata clone = new X509Metadata(commonName, password); clone.emailAddress = emailAddress; @@ -225,14 +225,14 @@ clone.userDisplayname = userDisplayname; return clone; } - + public String getOID(String oid, String defaultValue) { if (oids.containsKey(oid)) { return oids.get(oid); } return defaultValue; } - + public void setOID(String oid, String value) { if (StringUtils.isEmpty(value)) { oids.remove(oid); @@ -241,10 +241,10 @@ } } } - + /** * Prepare all the certificates and stores necessary for a Gitblit GO server. - * + * * @param metadata * @param folder * @param x509log @@ -252,9 +252,9 @@ public static void prepareX509Infrastructure(X509Metadata metadata, File folder, X509Log x509log) { // make the specified folder, if necessary folder.mkdirs(); - + // Gitblit CA certificate - File caKeyStore = new File(folder, CA_KEY_STORE); + File caKeyStore = new File(folder, CA_KEY_STORE); if (!caKeyStore.exists()) { logger.info(MessageFormat.format("Generating {0} ({1})", CA_CN, caKeyStore.getAbsolutePath())); X509Certificate caCert = newCertificateAuthority(metadata, caKeyStore, x509log); @@ -262,7 +262,7 @@ } // Gitblit CRL - File caRevocationList = new File(folder, CA_REVOCATION_LIST); + File caRevocationList = new File(folder, CA_REVOCATION_LIST); if (!caRevocationList.exists()) { logger.info(MessageFormat.format("Generating {0} CRL ({1})", CA_CN, caRevocationList.getAbsolutePath())); newCertificateRevocationList(caRevocationList, caKeyStore, metadata.password); @@ -273,7 +273,7 @@ File oldKeyStore = new File(folder, "keystore"); if (oldKeyStore.exists()) { oldKeyStore.renameTo(new File(folder, SERVER_KEY_STORE)); - logger.info(MessageFormat.format("Renaming {0} to {1}", oldKeyStore.getName(), SERVER_KEY_STORE)); + logger.info(MessageFormat.format("Renaming {0} to {1}", oldKeyStore.getName(), SERVER_KEY_STORE)); } // create web SSL certificate signed by CA @@ -282,7 +282,7 @@ logger.info(MessageFormat.format("Generating SSL certificate for {0} signed by {1} ({2})", metadata.commonName, CA_CN, serverKeyStore.getAbsolutePath())); PrivateKey caPrivateKey = getPrivateKey(CA_ALIAS, caKeyStore, metadata.password); X509Certificate caCert = getCertificate(CA_ALIAS, caKeyStore, metadata.password); - newSSLCertificate(metadata, caPrivateKey, caCert, serverKeyStore, x509log); + newSSLCertificate(metadata, caPrivateKey, caCert, serverKeyStore, x509log); } // server certificate trust store holds trusted public certificates @@ -293,11 +293,11 @@ addTrustedCertificate(CA_ALIAS, caCert, serverTrustStore, metadata.password); } } - + /** * Open a keystore. Store type is determined by file extension of name. If * undetermined, JKS is assumed. The keystore does not need to exist. - * + * * @param storeFile * @param storePassword * @return a KeyStore @@ -336,10 +336,10 @@ throw new RuntimeException("Could not open keystore " + storeFile, e); } } - + /** * Saves the keystore to the specified file. - * + * * @param targetStoreFile * @param store * @param password @@ -376,17 +376,17 @@ } catch (IOException e) { } } - + if (tmpFile.exists()) { tmpFile.delete(); } } - } + } /** * Retrieves the X509 certificate with the specified alias from the certificate * store. - * + * * @param alias * @param storeFile * @param storePassword @@ -401,11 +401,11 @@ throw new RuntimeException(e); } } - + /** * Retrieves the private key for the specified alias from the certificate * store. - * + * * @param alias * @param storeFile * @param storePassword @@ -425,7 +425,7 @@ * Saves the certificate to the file system. If the destination filename * ends with the pem extension, the certificate is written in the PEM format, * otherwise the certificate is written in the DER format. - * + * * @param cert * @param targetFile */ @@ -443,7 +443,7 @@ try { pemWriter = new PEMWriter(new FileWriter(tmpFile)); pemWriter.writeObject(cert); - pemWriter.flush(); + pemWriter.flush(); } finally { if (pemWriter != null) { pemWriter.close(); @@ -462,9 +462,9 @@ } } } - + // rename tmp file to target - if (targetFile.exists()) { + if (targetFile.exists()) { targetFile.delete(); } tmpFile.renameTo(targetFile); @@ -475,10 +475,10 @@ throw new RuntimeException("Failed to save certificate " + cert.getSubjectX500Principal().getName(), e); } } - + /** * Generate a new keypair. - * + * * @return a keypair * @throws Exception */ @@ -487,10 +487,10 @@ kpGen.initialize(KEY_LENGTH, new SecureRandom()); return kpGen.generateKeyPair(); } - + /** * Builds a distinguished name from the X509Metadata. - * + * * @return a DN */ private static X500Name buildDistinguishedName(X509Metadata metadata) { @@ -501,14 +501,14 @@ setOID(dnBuilder, metadata, "O", Constants.NAME); setOID(dnBuilder, metadata, "OU", Constants.NAME); setOID(dnBuilder, metadata, "E", metadata.emailAddress); - setOID(dnBuilder, metadata, "CN", metadata.commonName); + setOID(dnBuilder, metadata, "CN", metadata.commonName); X500Name dn = dnBuilder.build(); return dn; } - + private static void setOID(X500NameBuilder dnBuilder, X509Metadata metadata, String oid, String defaultValue) { - + String value = null; if (metadata.oids != null && metadata.oids.containsKey(oid)) { value = metadata.oids.get(oid); @@ -516,7 +516,7 @@ if (StringUtils.isEmpty(value)) { value = defaultValue; } - + if (!StringUtils.isEmpty(value)) { try { Field field = BCStyle.class.getField(oid); @@ -531,7 +531,7 @@ /** * Creates a new SSL certificate signed by the CA private key and stored in * keyStore. - * + * * @param sslMetadata * @param caPrivateKey * @param caCert @@ -544,15 +544,15 @@ X500Name webDN = buildDistinguishedName(sslMetadata); X500Name issuerDN = new X500Name(PrincipalUtil.getIssuerX509Principal(caCert).getName()); - + X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder( issuerDN, - BigInteger.valueOf(System.currentTimeMillis()), + BigInteger.valueOf(System.currentTimeMillis()), sslMetadata.notBefore, sslMetadata.notAfter, webDN, pair.getPublic()); - + JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils(); certBuilder.addExtension(X509Extension.subjectKeyIdentifier, false, extUtils.createSubjectKeyIdentifier(pair.getPublic())); certBuilder.addExtension(X509Extension.basicConstraints, false, new BasicConstraints(false)); @@ -561,7 +561,7 @@ // support alternateSubjectNames for SSL certificates List<GeneralName> altNames = new ArrayList<GeneralName>(); if (HttpUtils.isIpAddress(sslMetadata.commonName)) { - altNames.add(new GeneralName(GeneralName.iPAddress, sslMetadata.commonName)); + altNames.add(new GeneralName(GeneralName.iPAddress, sslMetadata.commonName)); } if (altNames.size() > 0) { GeneralNames subjectAltName = new GeneralNames(altNames.toArray(new GeneralName [altNames.size()])); @@ -572,7 +572,7 @@ .setProvider(BC).build(caPrivateKey); X509Certificate cert = new JcaX509CertificateConverter().setProvider(BC) .getCertificate(certBuilder.build(caSigner)); - + cert.checkValidity(new Date()); cert.verify(caCert.getPublicKey()); @@ -581,9 +581,9 @@ serverStore.setKeyEntry(sslMetadata.commonName, pair.getPrivate(), sslMetadata.password.toCharArray(), new Certificate[] { cert, caCert }); saveKeyStore(targetStoreFile, serverStore, sslMetadata.password); - + x509log.log(MessageFormat.format("New SSL certificate {0,number,0} [{1}]", cert.getSerialNumber(), cert.getSubjectDN().getName())); - + // update serial number in metadata object sslMetadata.serialNumber = cert.getSerialNumber().toString(); @@ -596,7 +596,7 @@ /** * Creates a new certificate authority PKCS#12 store. This function will * destroy any existing CA store. - * + * * @param metadata * @param storeFile * @param keystorePassword @@ -606,13 +606,13 @@ public static X509Certificate newCertificateAuthority(X509Metadata metadata, File storeFile, X509Log x509log) { try { KeyPair caPair = newKeyPair(); - + ContentSigner caSigner = new JcaContentSignerBuilder(SIGNING_ALGORITHM).setProvider(BC).build(caPair.getPrivate()); - + // clone metadata X509Metadata caMetadata = metadata.clone(CA_CN, metadata.password); X500Name issuerDN = buildDistinguishedName(caMetadata); - + // Generate self-signed certificate X509v3CertificateBuilder caBuilder = new JcaX509v3CertificateBuilder( issuerDN, @@ -621,16 +621,16 @@ caMetadata.notAfter, issuerDN, caPair.getPublic()); - + JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils(); caBuilder.addExtension(X509Extension.subjectKeyIdentifier, false, extUtils.createSubjectKeyIdentifier(caPair.getPublic())); caBuilder.addExtension(X509Extension.authorityKeyIdentifier, false, extUtils.createAuthorityKeyIdentifier(caPair.getPublic())); caBuilder.addExtension(X509Extension.basicConstraints, false, new BasicConstraints(true)); caBuilder.addExtension(X509Extension.keyUsage, true, new KeyUsage(KeyUsage.digitalSignature | KeyUsage.keyCertSign | KeyUsage.cRLSign)); - + JcaX509CertificateConverter converter = new JcaX509CertificateConverter().setProvider(BC); X509Certificate cert = converter.getCertificate(caBuilder.build(caSigner)); - + // confirm the validity of the CA certificate cert.checkValidity(new Date()); cert.verify(cert.getPublicKey()); @@ -639,13 +639,13 @@ if (storeFile.exists()) { storeFile.delete(); } - + // Save private key and certificate to new keystore KeyStore store = openKeyStore(storeFile, caMetadata.password); store.setKeyEntry(CA_ALIAS, caPair.getPrivate(), caMetadata.password.toCharArray(), new Certificate[] { cert }); saveKeyStore(storeFile, store, caMetadata.password); - + x509log.log(MessageFormat.format("New CA certificate {0,number,0} [{1}]", cert.getSerialNumber(), cert.getIssuerDN().getName())); // update serial number in metadata object @@ -656,11 +656,11 @@ throw new RuntimeException("Failed to generate Gitblit CA certificate!", t); } } - + /** * Creates a new certificate revocation list (CRL). This function will * destroy any existing CRL file. - * + * * @param caRevocationList * @param storeFile * @param keystorePassword @@ -675,7 +675,7 @@ X500Name issuerDN = new X500Name(PrincipalUtil.getIssuerX509Principal(caCert).getName()); X509v2CRLBuilder crlBuilder = new X509v2CRLBuilder(issuerDN, new Date()); - + // build and sign CRL with CA private key ContentSigner signer = new JcaContentSignerBuilder(SIGNING_ALGORITHM).setProvider(BC).build(caPrivateKey); X509CRLHolder crl = crlBuilder.build(signer); @@ -703,10 +703,10 @@ throw new RuntimeException("Failed to create new certificate revocation list " + caRevocationList, e); } } - + /** * Imports a certificate into the trust store. - * + * * @param alias * @param cert * @param storeFile @@ -716,33 +716,33 @@ try { KeyStore store = openKeyStore(storeFile, storePassword); store.setCertificateEntry(alias, cert); - saveKeyStore(storeFile, store, storePassword); + saveKeyStore(storeFile, store, storePassword); } catch (Exception e) { throw new RuntimeException("Failed to import certificate into trust store " + storeFile, e); } } - + /** * Creates a new client certificate PKCS#12 and PEM store. Any existing * stores are destroyed. After generation, the certificates are bundled * into a zip file with a personalized README file. - * - * The zip file reference is returned. - * + * + * The zip file reference is returned. + * * @param clientMetadata a container for dynamic parameters needed for generation * @param caKeystoreFile * @param caKeystorePassword * @param x509log * @return a zip file containing the P12, PEM, and personalized README */ - public static File newClientBundle(X509Metadata clientMetadata, File caKeystoreFile, + public static File newClientBundle(X509Metadata clientMetadata, File caKeystoreFile, String caKeystorePassword, X509Log x509log) { try { // read the Gitblit CA key and certificate KeyStore store = openKeyStore(caKeystoreFile, caKeystorePassword); PrivateKey caPrivateKey = (PrivateKey) store.getKey(CA_ALIAS, caKeystorePassword.toCharArray()); X509Certificate caCert = (X509Certificate) store.getCertificate(CA_ALIAS); - + // generate the P12 and PEM files File targetFolder = new File(caKeystoreFile.getParentFile(), clientMetadata.commonName); X509Certificate cert = newClientCertificate(clientMetadata, caPrivateKey, caCert, targetFolder); @@ -750,7 +750,7 @@ // process template message String readme = processTemplate(new File(caKeystoreFile.getParentFile(), "instructions.tmpl"), clientMetadata); - + // Create a zip bundle with the p12, pem, and a personalized readme File zipFile = new File(targetFolder, clientMetadata.commonName + ".zip"); if (zipFile.exists()) { @@ -764,24 +764,24 @@ zos.putNextEntry(new ZipEntry(p12File.getName())); zos.write(FileUtils.readContent(p12File)); zos.closeEntry(); - } + } File pemFile = new File(targetFolder, clientMetadata.commonName + ".pem"); if (pemFile.exists()) { zos.putNextEntry(new ZipEntry(pemFile.getName())); zos.write(FileUtils.readContent(pemFile)); zos.closeEntry(); } - + // include user's public certificate zos.putNextEntry(new ZipEntry(clientMetadata.commonName + ".cer")); zos.write(cert.getEncoded()); zos.closeEntry(); - + // include CA public certificate zos.putNextEntry(new ZipEntry("ca.cer")); zos.write(caCert.getEncoded()); zos.closeEntry(); - + if (readme != null) { zos.putNextEntry(new ZipEntry("README.TXT")); zos.write(readme.getBytes("UTF-8")); @@ -793,17 +793,17 @@ zos.close(); } } - + return zipFile; } catch (Throwable t) { throw new RuntimeException("Failed to generate client bundle!", t); } } - + /** * Creates a new client certificate PKCS#12 and PEM store. Any existing * stores are destroyed. - * + * * @param clientMetadata a container for dynamic parameters needed for generation * @param caKeystoreFile * @param caKeystorePassword @@ -814,10 +814,10 @@ PrivateKey caPrivateKey, X509Certificate caCert, File targetFolder) { try { KeyPair pair = newKeyPair(); - - X500Name userDN = buildDistinguishedName(clientMetadata); + + X500Name userDN = buildDistinguishedName(clientMetadata); X500Name issuerDN = new X500Name(PrincipalUtil.getIssuerX509Principal(caCert).getName()); - + // create a new certificate signed by the Gitblit CA certificate X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder( issuerDN, @@ -826,7 +826,7 @@ clientMetadata.notAfter, userDN, pair.getPublic()); - + JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils(); certBuilder.addExtension(X509Extension.subjectKeyIdentifier, false, extUtils.createSubjectKeyIdentifier(pair.getPublic())); certBuilder.addExtension(X509Extension.basicConstraints, false, new BasicConstraints(false)); @@ -844,7 +844,7 @@ PKCS12BagAttributeCarrier bagAttr = (PKCS12BagAttributeCarrier)pair.getPrivate(); bagAttr.setBagAttribute(PKCSObjectIdentifiers.pkcs_9_at_localKeyId, extUtils.createSubjectKeyIdentifier(pair.getPublic())); - + // confirm the validity of the user certificate userCert.checkValidity(); userCert.verify(caCert.getPublicKey()); @@ -854,7 +854,7 @@ verifyChain(userCert, caCert); targetFolder.mkdirs(); - + // save certificate, stamped with unique name String date = new SimpleDateFormat("yyyyMMdd").format(new Date()); String id = date; @@ -865,7 +865,7 @@ certFile = new File(targetFolder, id + ".cer"); count++; } - + // save user private key, user certificate and CA certificate to a PKCS#12 store File p12File = new File(targetFolder, clientMetadata.commonName + ".p12"); if (p12File.exists()) { @@ -873,9 +873,9 @@ } KeyStore userStore = openKeyStore(p12File, clientMetadata.password); userStore.setKeyEntry(MessageFormat.format("Gitblit ({0}) {1} {2}", clientMetadata.serverHostname, clientMetadata.userDisplayname, id), pair.getPrivate(), null, new Certificate [] { userCert }); - userStore.setCertificateEntry(MessageFormat.format("Gitblit ({0}) Certificate Authority", clientMetadata.serverHostname), caCert); + userStore.setCertificateEntry(MessageFormat.format("Gitblit ({0}) Certificate Authority", clientMetadata.serverHostname), caCert); saveKeyStore(p12File, userStore, clientMetadata.password); - + // save user private key, user certificate, and CA certificate to a PEM store File pemFile = new File(targetFolder, clientMetadata.commonName + ".pem"); if (pemFile.exists()) { @@ -887,22 +887,22 @@ pemWriter.writeObject(caCert); pemWriter.flush(); pemWriter.close(); - + // save certificate after successfully creating the key stores saveCertificate(userCert, certFile); - + // update serial number in metadata object clientMetadata.serialNumber = userCert.getSerialNumber().toString(); - + return userCert; } catch (Throwable t) { throw new RuntimeException("Failed to generate client certificate!", t); } } - + /** * Verifies a certificate's chain to ensure that it will function properly. - * + * * @param testCert * @param additionalCerts * @return @@ -913,19 +913,19 @@ if (isSelfSigned(testCert)) { throw new RuntimeException("The certificate is self-signed. Nothing to verify."); } - + // Prepare a set of all certificates // chain builder must have all certs, including cert to validate // http://stackoverflow.com/a/10788392 Set<X509Certificate> certs = new HashSet<X509Certificate>(); certs.add(testCert); certs.addAll(Arrays.asList(additionalCerts)); - + // Attempt to build the certification chain and verify it // Create the selector that specifies the starting certificate - X509CertSelector selector = new X509CertSelector(); + X509CertSelector selector = new X509CertSelector(); selector.setCertificate(testCert); - + // Create the trust anchors (set of root CA certificates) Set<TrustAnchor> trustAnchors = new HashSet<TrustAnchor>(); for (X509Certificate cert : additionalCerts) { @@ -933,16 +933,16 @@ trustAnchors.add(new TrustAnchor(cert, null)); } } - + // Configure the PKIX certificate builder PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(trustAnchors, selector); pkixParams.setRevocationEnabled(false); pkixParams.addCertStore(CertStore.getInstance("Collection", new CollectionCertStoreParameters(certs), BC)); - + // Build and verify the certification chain CertPathBuilder builder = CertPathBuilder.getInstance("PKIX", BC); PKIXCertPathBuilderResult verifiedCertChain = (PKIXCertPathBuilderResult) builder.build(pkixParams); - + // The chain is built and verified return verifiedCertChain; } catch (CertPathBuilderException e) { @@ -951,10 +951,10 @@ throw new RuntimeException("Error verifying the certificate: " + testCert.getSubjectX500Principal(), e); } } - + /** * Checks whether given X.509 certificate is self-signed. - * + * * @param cert * @return true if the certificate is self-signed */ @@ -970,7 +970,7 @@ throw new RuntimeException(e); } } - + public static String processTemplate(File template, X509Metadata metadata) { String content = null; if (template.exists()) { @@ -993,10 +993,10 @@ } return content; } - + /** * Revoke a certificate. - * + * * @param cert * @param reason * @param caRevocationList @@ -1019,10 +1019,10 @@ } return false; } - + /** * Revoke a certificate. - * + * * @param cert * @param reason * @param caRevocationList @@ -1036,16 +1036,16 @@ X500Name issuerDN = new X500Name(PrincipalUtil.getIssuerX509Principal(cert).getName()); X509v2CRLBuilder crlBuilder = new X509v2CRLBuilder(issuerDN, new Date()); if (caRevocationList.exists()) { - byte [] data = FileUtils.readContent(caRevocationList); + byte [] data = FileUtils.readContent(caRevocationList); X509CRLHolder crl = new X509CRLHolder(data); crlBuilder.addCRL(crl); } crlBuilder.addCRLEntry(cert.getSerialNumber(), new Date(), reason.ordinal()); - + // build and sign CRL with CA private key ContentSigner signer = new JcaContentSignerBuilder("SHA1WithRSA").setProvider(BC).build(caPrivateKey); X509CRLHolder crl = crlBuilder.build(signer); - + File tmpFile = new File(caRevocationList.getParentFile(), Long.toHexString(System.currentTimeMillis()) + ".tmp"); FileOutputStream fos = null; try { @@ -1057,7 +1057,7 @@ caRevocationList.delete(); } tmpFile.renameTo(caRevocationList); - + } finally { if (fos != null) { fos.close(); @@ -1066,7 +1066,7 @@ tmpFile.delete(); } } - + x509log.log(MessageFormat.format("Revoked certificate {0,number,0} reason: {1} [{2}]", cert.getSerialNumber(), reason.toString(), cert.getSubjectDN().getName())); return true; @@ -1076,10 +1076,10 @@ } return false; } - + /** * Returns true if the certificate has been revoked. - * + * * @param cert * @param caRevocationList * @return true if the certificate is revoked @@ -1107,7 +1107,7 @@ } return false; } - + public static X509Metadata getMetadata(X509Certificate cert) { // manually split DN into OID components // this is instead of parsing with LdapName which: @@ -1121,7 +1121,7 @@ String data = val[1].trim(); oids.put(oid, data); } - + X509Metadata metadata = new X509Metadata(oids.get("CN"), "whocares"); metadata.oids.putAll(oids); metadata.serialNumber = cert.getSerialNumber().toString(); -- Gitblit v1.9.1