2017-04-25 17 views
9

मैंने पहले से ही अपने प्रोजेक्ट में लीफ सर्टिफिकेट लागू किया है, यह ठीक काम कर रहा है। कृपया नीचे दिए गए कोड की जांच करें, अब समस्या यह है कि मेरे सर्वर में एक साल बाद लीफ सर्टिफिकेट समाप्त हो जाएगा, इसलिए मैं पत्ती प्रमाण पत्र को सत्यापित करना चाहता हूं ताकि जब यह समाप्त हो जाए/अमान्य हो तो मैं इंटरमीडिएट सर्टिफिकेट का उपयोग कर सकता हूं?एंड्रॉइड में पिनिंग/इंटरमीडिएट सर्टिफिकेट पिनिंग को कैसे कार्यान्वित करें?

क्या मध्यवर्ती प्रमाणपत्र लागू करने के लिए कोई उदाहरण है?

कृपया मेरी मदद करें!

कोड: -

SSLContext sslContext = null; 
     try { 
      CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
      InputStream caInput = context.getResources().openRawResource(certRawRef); 
      Certificate ca; 
      try { 
       ca = cf.generateCertificate(caInput); 
      } finally { 
       caInput.close(); 
      } 
      // Create a KeyStore containing our trusted CAs 
      String keyStoreType = KeyStore.getDefaultType(); 
      KeyStore keyStore = KeyStore.getInstance(keyStoreType); 
      keyStore.load(null, null); 
      keyStore.setCertificateEntry("ca", ca); 
      // Create a TrustManager that trusts the CAs in our KeyStore 
      String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); 
      TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); 
      tmf.init(keyStore); 
      // Create an SSLContext that uses our TrustManager 

      sslContext = SSLContext.getInstance("TLSv1.2"); 
      sslContext.init(null, tmf.getTrustManagers(), null); 
      return sslContext; 
     } catch (Exception e) { 
      Log.e("EXCEPTION",e.toString()); 
      //Print here right certificate failure issue 
     } 
+1

इस लेख आपकी मदद कर सकती है ... https: //medium.com/@appmattus/android-security- एसएसएल-पिन-1db8acb6621e – PN10

उत्तर

1

अंत में मैं जवाब मिला: -

try { 
      CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
      InputStream caInputLeaf = context.getResources().openRawResource(leafCert); 
      InputStream caInputInter = context.getResources().openRawResource(interCert); 
      try { 
       if (cf != null) { 
        ca = cf.generateCertificate(caInputLeaf); 

        URL url = new URL(URL); 
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 
        conn.setRequestMethod("GET"); 
        conn.connect(); 

        chain = conn.getServerCertificates(); 
        if(chain!=null && chain[0].equals(ca)) {   //Return Leaf certificate 
         return ca; 
        } 
        else{         //Return Intermediate certificate 
         ca = cf.generateCertificate(caInputInter); 
         return ca; 
        } 
       } 
      } catch (Exception cee) { 
       ca = cf.generateCertificate(caInputInter); 
       return ca; 
      } 
     } catch (Exception e) { 
      Log.e("EXCEPTION", e.toString()); 
     } 
संबंधित मुद्दे

 संबंधित मुद्दे