2016-03-21 21 views
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(); 
      } 

答えて

0

代わりに証明書の失効を検証する方法です://

関連する問題