自分のコードにjavax.net.ssl.X509TrustManager
を実装していますので、自分のソフトウェアがアクセスする自己署名証明書を検証できます。しかし、私はまだ他のいくつかの "標準"ウェブサイトのSSL証明書を検証する必要があります。私はCertPathValidator.validate()
を使用していますが、私はmaps.googleapis.comのために渡されている1つの証明書チェーンに実際に完全なチェーンが含まれていないことに気づきました。チェーン全体が含まれていますが、ルートCA(Equifax)電話には存在しますが、validate()
はまだ明らかにチェーン内に明示されていないために失敗します。検証が成功するように、私はここで何が欠けていますか?どのような入力をありがとう。AndroidマニュアルX509証明書チェーンの検証
編集 - (例外は削除チェック付き)関連するコード:自分のTrustManagerの実装
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);
もう少し詳しく説明します。エラーが発生したときに 'validate()'の呼び出しから 'CertPathValidatorException'を取得しました** org.bouncycastle.jce.exception.ExtCertPathValidatorException:発行者" OU = Equifax Secure Certificate Authority 、O = Equifax、C = US "** – Conrad