मैंने एक सर्टिफिकेट प्रदाता को इस समस्या का पीछा किया, जो डिफ़ॉल्ट JVM विश्वसनीय होस्ट का हिस्सा नहीं है JDK 8u74
। प्रदाता www.identrust.com है , लेकिन वह वह डोमेन नहीं था जिसे मैं कनेक्ट करने का प्रयास कर रहा था। उस डोमेन ने इस प्रदाता से अपना प्रमाणपत्र प्राप्त कर लिया था। देखें विल JDK / JRE में डिफ़ॉल्ट सूची से पार जड़ कवर विश्वास? - एक युगल प्रविष्टियों को पढ़ें। यह भी देखें कि कौन से ब्राउज़र और ऑपरेटिंग सिस्टम एनक्रिप्ट करते हैं ।
इसलिए, जिस डोमेन में मेरी दिलचस्पी थी, उससे जुड़ने के लिए, जिसके पास एक प्रमाण पत्र था, जिसे identrust.com
मैंने निम्नलिखित चरणों में जारी किया था। मूल रूप से, मुझे आइडेंटिफिकेशन.कॉम प्राप्त करना था (DST Root CA X3
JVM द्वारा विश्वसनीय होने के लिए ) प्रमाणपत्र । मैं ऐसा करने में सक्षम था Apache HttpComports 4.5 का उपयोग करना
1: पर अनिश्चित काल से प्रमाण पत्र प्राप्त करें सर्टिफिकेट चेन डाउनलोड इंस्ट्रक्शंस सर्टिफिकेट । DST रूट CA X3 लिंक पर क्लिक करें ।
2: स्ट्रिंग को "DST रूट CA X3.pem" नामक फ़ाइल में सहेजें। शुरुआत और अंत में फ़ाइल में "----- BEGIN CERTIFICATE -----" और "----- END CERTIFICATE -----" लाइनों को जोड़ना सुनिश्चित करें।
3: निम्न कमांड के साथ java keystore फ़ाइल, cacerts.jks बनाएँ:
keytool -import -v -trustcacerts -alias IdenTrust -keypass yourpassword -file dst_root_ca_x3.pem -keystore cacerts.jks -storepass yourpassword
4: अपने java / (maven) एप्लिकेशन की संसाधन निर्देशिका में परिणामी cacerts.jks कीस्टोर को कॉपी करें।
5: इस फ़ाइल को लोड करने के लिए निम्न कोड का उपयोग करें और इसे Apache 4.5 HttpClient के साथ संलग्न करें। यह उन सभी डोमेन के लिए समस्या का समाधान करेगा जिनके पास उपयोग indetrust.com
ओरेकल से जारी किए गए प्रमाण पत्र हैं, जिसमें प्रमाण पत्र JRE डिफ़ॉल्ट कीस्टॉर में शामिल है।
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial(new File(CalRestClient.class.getResource("/cacerts.jks").getFile()), "yourpasword".toCharArray(),
new TrustSelfSignedStrategy())
.build();
// Allow TLSv1 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] { "TLSv1" },
null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.build();
जब प्रोजेक्ट बनता है तो cacerts.jks को क्लासपाथ में कॉपी किया जाएगा और वहां से लोड किया जाएगा। मैंने इस समय, अन्य एसएसएल साइटों के खिलाफ परीक्षण नहीं किया था, लेकिन अगर इस प्रमाण पत्र में उपरोक्त कोड "चेन" हैं तो वे भी काम करेंगे, लेकिन फिर, मुझे नहीं पता।
संदर्भ: कस्टम एसएसएल संदर्भ और मैं एक जावा HttpsURLConnection के साथ स्व-हस्ताक्षरित प्रमाण पत्र कैसे स्वीकार करूं?