Я реализовал javax.net.ssl.X509TrustManager
в своем коде, чтобы я мог проверить свой самоподписанный сертификат, к которому обращается мое программное обеспечение.Однако мне все еще нужно проверить некоторые другие «стандартные» сертификаты SSL на веб-сайте.Я использую CertPathValidator.validate()
для этого, но я только что понял, что одна цепочка сертификатов, которую я передаю (для maps.googleapis.com), на самом деле не содержит полную цепочку - она содержит всю цепочку, но Root CA (Equifax)), который существует на телефоне, но validate()
по-прежнему не работает, потому что (по-видимому) это явно не в цепочке.Что мне здесь не хватает, чтобы проверка прошла успешно?Спасибо за любой ввод.
Редактировать - Соответствующий код (с удаленной проверкой исключений):
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);