15
AndroidでOCSPの検証を実装しようとしている過去数日間、壁に頭を悩ませました。AndroidでOCSP証明書をステープル留めする
これまでのところ、iOSは実装が簡単でしたが、Androidのために私が見つけた情報はすべて機能しません。私は私の顧客のAPIエンドポイントとthis websiteの両方を使用して証明書失効のテストを実行していますが、これまでAndroidアプリケーション内で取り消された証明書を検出することはできませんでした。私はOKHTTPClientを使用しています。 は、ここで私はのHttpURLConnectionまたはHttpsURLConnectionは HTTPSの場合には、ビルドにはAndroidのを使用してみてくださいOkHttp使用するのでは
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
assert (chain != null);
if (chain == null) {
throw new IllegalArgumentException(
"checkServerTrusted: X509Certificate array is null");
}
assert (chain.length > 0);
if (!(chain.length > 0)) {
throw new IllegalArgumentException(
"checkServerTrusted: X509Certificate is empty");
}
if (VERIFY_AUTHTYPE) {
assert (null != authType && authType.equalsIgnoreCase(AUTH_TYPE));
if (!(null != authType && authType.equalsIgnoreCase(AUTH_TYPE))) {
throw new CertificateException(
"checkServerTrusted: AuthType is not " + AUTH_TYPE);
}
}
if(chain[0]!=null){
try {
X509Certificate issuerCert = chain[1];
X509Certificate c1 = chain[0];
TrustAnchor anchor = new TrustAnchor(issuerCert, null);
Set anchors = Collections.singleton(anchor);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
List list = Arrays.asList(new Certificate[]{c1});
CertPath path = cf.generateCertPath(list);
PKIXParameters params = new PKIXParameters(anchors);
// Activate certificate revocation checking
params.setRevocationEnabled(false);
// Activate OCSP
Security.setProperty("ocsp.enable", "true");
// Ensure that the ocsp.responderURL property is not set.
if (Security.getProperty("ocsp.responderURL") != null) {
throw new
Exception("The ocsp.responderURL property must not be set");
}
CertPathValidator validator = CertPathValidator.getInstance("PKIX");
PKIXCertPathValidatorResult result = (PKIXCertPathValidatorResult) validator
.validate(path, params);
System.out.println("VALID");
} catch (Exception e) {
System.out.println("EXCEPTION " + e.getMessage());
e.printStackTrace();
}