2011-06-22 9 views
11

मैं एक ट्यूटोरियल है कि Android के आसपास मामलों नहीं किया गया था निम्नलिखित शुरू कर दिया और यह मिल गया:मैं एंड्रॉइड के माध्यम से एक एसएसएल कनेक्शन कैसे प्राप्त कर सकता हूं?

System.setProperty("javax.net.ssl.trustStore", "truststore"); 
    System.setProperty("javax.net.ssl.trustStorePassword", "password"); 

    SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
    try { 
     Socket s = ssf.createSocket("192.168.2.11", 6543); 
     PrintWriter out = new PrintWriter(s.getOutputStream()); 
     while (true){ 
      out.println("SSL TEST"); 
      Log.d("DATA", "DATA SENT"); 
     } 



    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

मैं इस में कुछ प्रश्नों करने पर निर्भर करता है लगता है:

  1. मैं अपने खुद के विश्वास की दुकान नहीं है बनाया, लेकिन ट्यूटोरियल और चीजों के माध्यम से ऑनलाइन खोज, मुझे यकीन नहीं है कि कैसे एक बनाना है। क्या कोई तरीका है कि मैं ट्रस्ट स्टोर को बना या संशोधित कर सकता हूं ताकि मुझे इसमें आवश्यक प्रमाणपत्र प्राप्त हो सकें? (यदि कोई फर्क पड़ता है तो मैं एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग कर रहा हूं)

  2. मैं एसएसएल हैंडशेक के साथ चीजों को आसानी से कैसे चला सकता हूं? अभी, मुझे जो त्रुटि मिल रही है वह है:

     
    javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 
    

    ईमानदारी से, मैं वास्तव में समझ में नहीं आता कि इसका क्या अर्थ है।

  3. यह सुनिश्चित करने के लिए कि यह कनेक्शन हो सकता है, मेरे एंड्रॉइड डिवाइस पर मुझे किन सेटिंग्स या फ़ाइलों को संशोधित करने की आवश्यकता है?

+0

आपको गैर-एंड्रॉइड तकनीक को संशोधित करने की बजाय, इसे करने के लिए शायद एंड्रॉइड तरीके से शुरू करना चाहिए। –

+0

मैंने अपने सर्वर से कीस्टोर फ़ाइल को रखने और इसे मेरे जेडीके/जेआर/lib/सुरक्षा फ़ोल्डर में रखने और फिर उस मैच से ट्रस्ट स्टोर स्थान और पासवर्ड बदलने के लिए भी प्रयास किया और मुझे वही अपवाद मिला। – Matt

+0

प्रतीक्षा करें! "इसे करने का एंड्रॉइड तरीका" क्या है? – Matt

उत्तर

10

1) यह निर्भर करता है। क्या आपके पास सर्वर की ओर से एक स्वयं हस्ताक्षरित प्रमाणपत्र है और आप एंड्रॉइड डिवाइस पर अपनी पहचान को सत्यापित करने का प्रयास कर रहे हैं? या आप एंड्रॉइड पक्ष पर हैं जो सर्वर पर अपनी आइडेंटिटी को सत्यापित करने की कोशिश कर रहे हैं? यदि यह पूर्व है, तो कृपया यह लिंक देखें: http://www.codeproject.com/KB/android/SSLVerification_Android.aspx?display=Mobile

आप कुंजीस्टोर फ़ाइल कहां पर विशेष ध्यान देना चाहते हैं।

2) आपको यह त्रुटि मिल रही है क्योंकि यह उस सर्वर पर भरोसा नहीं करता है जिसे आप कनेक्ट कर रहे हैं क्योंकि आपने ट्रस्टस्टोर को सही तरीके से नहीं बनाया है या आप किसी ऐसे सर्वर से कनेक्ट कर रहे हैं जिसका प्रमाणपत्र नहीं जोड़ा गया है truststore। आप वास्तव में क्या कनेक्ट करने की कोशिश कर रहे हैं?

3) सुनिश्चित करें कि आपके पास manifest.xml में <uses-permission android:name="android.permission.INTERNET" /> है।

संपादित करें मेरी माफ़ी, कृपया पहले पैराग्राफ में किए गए परिवर्तन देखें।

यहाँ हिस्सा अपना कुंजी को प्रारंभ और truststore

SSLcontext sslContext = SSLContext.getDefault(); 

KeyStore trustSt = KeyStore.getInstance("BKS"); 
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
InputStream trustStoreStream = this.getResources().openRawResource(R.raw.truststore); 
trustSt.load(trustStoreStream, "<yourpassword>".toCharArray()); 
trustManagerFactory.init(trustStre); 

KeyStore keyStore = KeyStore.getInstance("BKS"); 
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
InputStream keyStoreStream = this.getResources().openRawResource(R.raw.keystore); 
keyStore.load(keyStoreStream, "<yourpassword>".toCharArray()); 
keyManagerFactory.init(keyStore, "<yourpassword>".toCharArray()); 

sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); 
+0

[+1] 1) मैं इसकी जांच करूंगा, हालांकि (इस वेबसाइट को देखने से पहले) मुझे यकीन नहीं है कि मैं कीस्टोर और ट्रस्टस्टोर के बीच भेद को समझता हूं। 2) शायद मैंने ट्रस्ट स्टोर को सही तरीके से नहीं बनाया है ...की तरह मैं कम से कम इस भाग का सही उत्तर दिया मैं JRE 3) में Keytool सुविधा का उपयोग किया लग रहा है: 0) – Matt

+1

हाय, माफ करना, मैं पहले पैराग्राफ में एक गलती की है, तो कृपया परिवर्तन देखने। – Otra

+2

ट्रस्ट स्टोर और कीस्टोर के बीच अंतर के बारे में मुझे लगता है कि ट्रस्ट स्टोर उन प्रमाणपत्रों की सूची है जो मुझे विश्वास है, इसलिए यदि मैं एंड्रॉइड पक्ष पर हूं, तो मैं अपने ट्रस्ट स्टोर में सर्वर प्रमाण लेना चाहता हूं। कीस्टोर वह जगह है जहां मैं अपने प्रमाण-पत्र सर्वर को सत्यापित करने के लिए रखता हूं। सर्वरसाइड पर, ट्रस्ट स्टोर है जहां मैं उन ग्राहकों की एक सूची रखता हूं जिन पर मैं भरोसा करता हूं और कीस्टोर वह जगह है जहां मैं अपना खुद का प्रमाण-पत्र रखता हूं। – Otra

1

जब तक सहकर्मी स्व-हस्ताक्षरित certifictes उपयोग कर रहा है आप अपनी खुद की truststore की जरूरत नहीं है के लिए है। ट्रस्टस्टोर के साथ जेआरई जहाजों का उपयोग डिफ़ॉल्ट रूप से किया जाता है, जो सभी प्रमुख सीए द्वारा जारी प्रमाण पत्रों पर भरोसा करते हैं।

+2

लेकिन मैं स्व-हस्ताक्षरित प्रमाण पत्र का उपयोग कर रहा हूँ ... – Matt

+0

@Matt ताकि आप एक truststore बनाना होगा। जेडीके से एक की प्रतिलिपि बनाएँ; एक फ़ाइल में सर्वर प्रमाणपत्र निर्यात करें; और इसे नए ट्रस्टस्टोर में आयात करें। – EJP

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

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