Changeset 4786081 for core


Ignore:
Timestamp:
Jan 4, 2019 12:15:58 PM (23 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
74ed9741
Parents:
150cee9a
Message:

Build: Check cert validity
Reseed updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/crypto/CertUtil.java

    r150cee9a r4786081  
    559559    public static final void main(String[] args) {
    560560        if (args.length < 2) {
    561             System.out.println("Usage: [loadcert | loadcrl | loadcrldir | loadcrldirs | isrevoked | loadprivatekey] file");
     561            System.out.println("Usage: [loadcert | loadcrl | loadcrldir | loadcrldirs | isrevoked | loadprivatekey | checkall] file");
    562562            System.exit(1);
    563563        }
     
    581581                boolean rv = isRevoked(I2PAppContext.getGlobalContext(), cert);
    582582                System.out.println("Revoked? " + rv);
     583            } else if (args[0].equals("checkall")) {
     584                int rv = checkAll(f);
     585                //System.exit(rv);
    583586            } else {
    584                 System.out.println("Usage: [loadcert | loadcrl | loadprivatekey] file");
     587                System.out.println("Usage: [loadcert | loadcrl | loadcrldir | loadcrldirs | isrevoked | loadprivatekey | checkall] file");
    585588            }
    586589
     
    590593        }
    591594    }
     595
     596    // threshold for warning
     597    private static final long CHECK = 120*24*60*60*1000L;
     598
     599    /**
     600     *  For use in the build process.
     601     *
     602     *  @return 0 for success, nonzero for failure
     603     *  @since 0.9.38
     604     */
     605    private static int checkAll(File dir) {
     606        int good = 0;
     607        int soon = 0;
     608        int bad = 0;
     609        Set<X509CRL> crls = new HashSet<X509CRL>(8);
     610        File rdir = new File(dir, REVOCATION_DIR);
     611        loadCRLs(crls, rdir);
     612        //System.out.println("Loaded " + crls.size() + " CRLs");
     613        CollectionCertStoreParameters ccsp = new CollectionCertStoreParameters(crls);
     614        CertStore store;
     615        try {
     616            store = CertStore.getInstance("Collection", ccsp);
     617        } catch (GeneralSecurityException gse) {
     618            // shouldn't happen
     619            error("CertStore", gse);
     620            throw new UnsupportedOperationException(gse);
     621        }
     622        long now = System.currentTimeMillis();
     623        File[] dirs = dir.listFiles();
     624        if (dirs != null) {
     625            for (int i = 0; i < dirs.length; i++) {
     626                File d = dirs[i];
     627                if (!d.isDirectory())
     628                    continue;
     629                if (d.getName().equals(REVOCATION_DIR))
     630                    continue;
     631                File[] files = d.listFiles(new FileSuffixFilter(".crt"));
     632                if (files != null) {
     633                    for (int j = 0; j < files.length; j++) {
     634                        File f = files[j];
     635                        try {
     636                            X509Certificate cert = loadCert(f);
     637                            if (isRevoked(store, cert)) {
     638                                System.out.println("ERROR: Revoked cert " + f);
     639                                bad++;
     640                                continue;
     641                            }
     642                            long exp = cert.getNotAfter().getTime() - now;
     643                            if (exp < CHECK) {                           
     644                                System.out.println("**** WARNING: Cert " + f + " expires in " + DataHelper.formatDuration(exp));
     645                                soon++;
     646                            } else {
     647                                good++;
     648                            }
     649                        } catch (IOException ioe) {
     650                            System.out.println("**** ERROR: Cannot load cert from " + f + ": " + ioe);
     651                            bad++;
     652                        } catch (java.security.cert.CertificateExpiredException cee) {
     653                            System.out.println("**** WARNING: Cert expired " + f + ": " + cee);
     654                            bad++;
     655                        } catch (GeneralSecurityException gse) {
     656                            System.out.println("**** ERROR: Cannot load cert from " + f + ": " + gse);
     657                            bad++;
     658                        }
     659                    }
     660                }
     661            }
     662        }
     663        System.out.println("Found " + good + " valid certs, " + bad + " bad certs, " + soon + " about to expire certs");
     664        return (bad > 0) ? 1 : 0;
     665    }
    592666}
Note: See TracChangeset for help on using the changeset viewer.