2016-03-21 12 views
15

Ho battuto la testa sul muro per i giorni scorsi cercando di implementare la convalida OCSP in Android.Pinzatura del certificato OCSP in Android

Finora in iOS è stato facile da implementare, ma per Android ogni singola informazione che ho trovato non funziona. Ho utilizzato l'endpoint API di entrambi i miei clienti e this website per eseguire test per la revoca dei certificati e finora non sono stato fortunato a rilevare un certificato revocato all'interno della mia applicazione Android. Sto usando OKHTTPClient. Ecco il metodo in cui a convalidare la certificazione revoca

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

risposta

0

Invece di usare OkHttp provare a utilizzare Android di corporatura HttpURLConnection o HttpsURLConnection in caso di https: //

Problemi correlati