2016-03-21 5 views
15

Od kilku dni walę głową w ścianę, próbując wdrożyć procedurę sprawdzania poprawności protokołu OCSP w systemie Android.Zszywanie certyfikatu OCSP w systemie Android

Do tej pory w iOS był łatwy do wdrożenia, ale dla Androida każda pojedyncza informacja, z którą się zetknąłem, po prostu nie działa. Używałem zarówno punktu końcowego interfejsu API mojego klienta, jak i this website do przeprowadzania testów unieważniania certyfikatów i do tej pory nie miałem szczęścia, aby wykryć odwołany certyfikat w mojej aplikacji Android. Używam OKHTTPClient. Oto metoda gdzie sprawdzania ważności certyfikatu

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(); 
      } 

Odpowiedz

0

Zamiast OkHttp spróbuj Android jest w budowie HttpURLConnection lub HttpsURLConnection w przypadku https: //