Ho implementato nel mio codice in modo da poter convalidare il mio certificato autofirmato, a cui accede il mio software. Tuttavia, ho ancora bisogno di convalidare alcuni altri certificati SSL "standard" del sito web. Sto usando CertPathValidator.validate()
per farlo, ma ho appena realizzato che una catena di certificati che sto passando (per maps.googleapis.com) in realtà non contiene la catena completa - contiene l'intera catena ma la CA radice (Equifax), che esiste sul telefono, ma validate()
non riesce ancora perché (apparentemente) non è esplicitamente nella catena. Cosa mi manca qui, in modo che la convalida abbia successo? Grazie per qualsiasi input.manuale Android convalida catena certificato X509
Modifica - relativo codice (con l'eccezione checking rimosso):
CertificateFactory cf = CertificateFactory.getInstance("X.509");
// chain is of type X509Certificate[]
CertPath cp = cf.generateCertPath(Arrays.asList(chain));
CertPathValidator cpv = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream is = new FileInputStream("/system/etc/security/cacerts.bks");
ks.load(is, null);
PKIXParameters params = new PKIXParameters(ks);
CertPathValidatorResult cpvr = cpv.validate(cp, params);
Altri dettagli: Ricevo un 'CertPathValidatorException' dalla chiamata a' validate() 'con l'errore, ** org.bouncycastle.jce.exception.ExtCertPathValidatorException: Nessun CRL trovato per l'emittente" OU = Equifax Secure Certificate Authority , O = Equifax, C = US "** – Conrad