2016-02-01 6 views
5

मैं वेबव्यू के भीतर क्लाइंट सर्टिफिकेट प्रमाणीकरण का उपयोग कर एक एंड्रॉइड ऐप विकसित कर रहा हूं। प्रमाण पत्र (cert.pfx) और पासवर्ड एप्लिकेशन में एम्बेडेड हैं।एंड्रॉइड वेबव्यू हैंडल ऑन रीसेड क्लाइंट कर्टआरक्वेट

जब WebView में ajax कॉल के साथ क्लाइंट प्रमाणपत्र प्रमाणीकरण अनुरोध निष्पादित करते हैं, तो निम्न समारोह कहा जाता हो रही है:

@Override 
public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) {} 

मैं understend जैसा कि मैंने कॉल करने की आवश्यकता:

request.proceed(PrivateKey privateKey, X509Certificate[] chain) 

किसी भी विचार कैसे बनाने के लिए अनुरोध के साथ आगे बढ़ने के लिए एम्बेडेड प्रमाणपत्र से PrivateKey और X509 प्रमाण पत्र ऑब्जेक्ट्स। बीटीडब्ल्यू, एंड्रॉइड ऐप पर क्लाइंट सर्टिफिकेट प्रमाणीकरण को लागू करने का यह सही तरीका है? यदि नहीं, तो सलाह दें।

उत्तर

7

यह KeyStore का उपयोग कर PrivateKey और X509Certificate वस्तुओं प्राप्त करने के लिए हल:

private X509Certificate[] mCertificates; 
    private PrivateKey mPrivateKey; 

    private void loadCertificateAndPrivateKey() { 
      try { 
       InputStream certificateFileStream = getClass().getResourceAsStream("/assets/cert.pfx"); 

       KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
       String password = "password"; 
       keyStore.load(certificateFileStream, password != null ? password.toCharArray() : null); 

       Enumeration<String> aliases = keyStore.aliases(); 
       String alias = aliases.nextElement(); 

       Key key = keyStore.getKey(alias, password.toCharArray()); 
       if (key instanceof PrivateKey) { 
        mPrivateKey = (PrivateKey)key; 
        Certificate cert = keyStore.getCertificate(alias); 
        mCertificates = new X509Certificate[1]; 
        mCertificates[0] = (X509Certificate)cert; 
       } 

       certificateFileStream.close(); 

      } catch (Exception e) { 
       Log.e(TAG, e.getMessage()); 
     } 
    } 


    private WebViewClient mWebViewClient = new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return false; 
     } 

     @Override 
     public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 
      handler.proceed(); 
     } 

     @Override 
     public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) { 
      if (mCertificates == null || mPrivateKey == null) { 
       loadCertificateAndPrivateKey(); 
      } 
      request.proceed(mPrivateKey, mCertificates); 
     } 
    }; 
संबंधित मुद्दे