का उपयोग कर एक HTTPS कनेक्शन बनाना मैं server पर एक HTTPS कनेक्शन बनाने की कोशिश कर रहा हूं जिसमें एक प्रमाणपत्र सेट अप्रैल 2013 में समाप्त हो गया है और रूट प्रमाणपत्र के रूप में ग्लोबलसाइन का उपयोग करता है।URL.openConnection()
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
// urlConnection.setSSLSocketFactory(sslSocketFactory);
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);
// Send the POST data
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
out.write(postParamString.toString().getBytes("UTF8"));
// Read the reply
InputStream in = urlConnection.getInputStream();
यह खड़ा के रूप में, इस फेंकता javax.net.ssl.SSLHandshakeException: org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate signature.
जब getOutputStream()
कहा जाता है।
यह एक ही साइट और प्रमाण पत्र शेयर एचटीसी वेब ब्राउज़र और डेस्कटॉप ब्राउज़र में मान्य हैं। जब मैं Google तक पहुंचने के लिए एक ही कोड का उपयोग करता हूं तो यह काम करता है (लेकिन फिर 404 त्रुटि के बारे में शिकायत करता है)। StackOverflow पर विभिन्न पोस्टों का अर्थ है कि इसे "बस काम करना चाहिए" और अन्य लोग अपना स्वयं का मुख्य स्टोर सेट अप करना चाहते हैं (या सभी HTTPS सत्यापन अक्षम करें!) मुझे लगता है कि व्यवहार में अंतर विभिन्न रूट कुंजी स्टोरों के उपयोग में है (क्या कोई इसे स्पष्ट कर सकता है ?)।
अब मैं एक कुंजी संग्रह उछाल वाले महल का उपयोग कर बनाने की कोशिश की है, लेकिन मैं यह अपने डिवाइस पर लोड करने के लिए नहीं मिल सकता है।
keytool.exe -import -alias onlinescoutmanager -file www.onlinescoutmanager.co.uk.crt -storetype BKS -keystore res\raw\keystore
यह तो भरी हुई है और आवेदन में प्रयोग किया जाता है का उपयोग कर:
InputStream stream = context.getResources().openRawResource(R.raw.keystore);
// BKS seems to be the default but we want to be explicit
KeyStore ks = KeyStore.getInstance("BKS");
ks.load(stream, "www.onlinescoutmanager.co.uk".toCharArray());
stream.close();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
SSLContext context2 = SSLContext.getInstance("TLS");
context2.init(null, new TrustManager[] { defaultTrustManager }, null);
sslSocketFactory = context2.getSocketFactory();
यह java.io.IOException: Wrong version of key store.
जब keystore.Load()
साथ विफल हो रहा है
फ़ायरफ़ॉक्स से प्रमाण पत्र के निर्यात के बाद, मैं एक कुंजी संग्रह का उपयोग कर बनाने के कहा जाता है।
मैं ensured I'm passing -storetype BKS
, used a <=7 character keystore password कुंजीसंग्रह को CA प्रमाणपत्रों को जोड़ लिया है, और दोनों Bouncy कैसल संस्करण 1.45 और 1.47 का उपयोग कर सूचना दी त्रुटि संदेश में कोई परिवर्तन नहीं होता कुंजी संग्रह बनाने के लिए।
मेरे पर्यावरण JRE 1.7u9b5 Windows 8 पर चलने वाले डिवाइस मैं पर परीक्षण कर रहा हूँ एक एचटीसी शेयर Android 2.3 चल रहा अनुभूति होती है साथ ग्रहण जूनो 4.2.1 है। एप्लिकेशन का न्यूनतम एसडीके संस्करण 7 है और 15 का लक्ष्य है।
अगर कोई विंडोज 8 पर वैध बीकेएस कुंजी स्टोर कैसे बना सकता है या ब्राउज़र के समान कुंजी स्टोर का उपयोग करने के लिए जावा कैसे प्राप्त कर सकता हूं, या सिस्टम?) की सराहना की जाएगी।
आप लिखने के समय entire project डाउनलोड कर सकते हैं, और generated keystore आवश्यक होने पर।
यह निश्चित रूप से सबसे अच्छा तैयार प्रश्न है जिसे मैंने कभी देखा है, किसी भी साइट पर –
@AndreaLigios मुझे बहुत कुछ जवाब देना पड़ा है, मुझे नियमों और "सभ्य प्रश्न पूछने" के बारे में पता होना चाहिए: p – Deanna
@ जब आप कीस्टोर बनाते हैं तो दीना, क्या आपके पास विकल्पों में ट्रस्टेड कैसर्ट होना चाहिए ताकि वह भरोसेमंद कॉर्ट का उपयोग कर प्रमाण को मान्य कर सके? (नेवी जावा समानता के आधार पर बीकेएस अनुमान लगाने के साथ काम किया) –