संपादित करें: - प्रश्न को प्रारूपित करने की कोशिश की और मेरा ब्लॉग पर अधिक प्रचलित तरीके से उत्तर स्वीकार किया
यहाँ मूल मुद्दा है।
मुझे यह त्रुटि मिल रही है:
विस्तृत संदेश sun.security.validator.ValidatorException: PKIX पथ निर्माण विफल:
sun.security.provider.certpath.SunCertPathBuilderException: लक्षित अनुरोध के लिए मान्य प्रमाणन पथ खोजने में असमर्थकारण javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX पथ निर्माण विफल: sun.security.provider.certpath.SunChPathBuilderException: अनुरोधित लक्ष्य के लिए मान्य प्रमाणन पथ खोजने में असमर्थ
मैं Tomcat 6 को वेबसर्वर के रूप में उपयोग कर रहा हूं। मेरे पास दो HTTPS वेब एप्लिकेशन हैं, जो अलग-अलग पोर्ट पर अलग-अलग Tomcats पर एक ही मशीन पर इंस्टॉल किए जाते हैं। कहते हैं App1(port 8443)
और
App2(port 443)
। App1
से जुड़ता है App2
। जब App1
से कनेक्ट करता है App2
मैं ऊपर त्रुटि मिलती है। मुझे पता है कि यह एक बहुत ही सामान्य त्रुटि है इसलिए विभिन्न मंचों और साइटों पर कई समाधान आए। मेरे पास server.xml
दोनों टॉमकट्स की नीचे प्रविष्टि है :
keystoreFile="c:/.keystore"
keystorePass="changeit"
हर साइट एक ही कारण कहती है कि app2 द्वारा दिया गया प्रमाणपत्र app1 jvm के विश्वसनीय स्टोर में नहीं है। यह सच भी प्रतीत होता है जब मैंने IE ब्राउज़र में एक ही यूआरएल को हिट करने की कोशिश की, यह काम करता है (वार्मिंग के साथ, इस वेब साइट के सुरक्षा प्रमाण पत्र के साथ एक समस्या है। यहां मैं कहता हूं कि इस वेबसाइट को जारी रखें)। लेकिन जब उसी URL को Java क्लाइंट (मेरे मामले में) द्वारा मारा जाता है, तो मुझे उपरोक्त त्रुटि मिलती है। इसलिए इसे ट्रस्टस्टोर में रखने के लिए मैंने इन तीन विकल्पों की कोशिश की:
विकल्प 1
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
Option2 पर्यावरण चर में नीचे की स्थापना
CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Option3 पर्यावरण चर में नीचे सेटिंग
JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
लेकिन कुछ भी काम नहीं आया ।
आख़िरकार क्या काम किया है अपाचे HttpClient के साथ अवैध एसएसएल प्रमाणपत्रों को संभालने के लिए सुझाए गए जावा दृष्टिकोण को निष्पादित कर रहा है ? पास्कल थिवेंट द्वारा अर्थात प्रोग्राम इंस्टाल्ट को निष्पादित करना।
लेकिन यह दृष्टिकोण देवबॉक्स सेटअप के लिए ठीक है लेकिन मैं इसे उत्पादन परिवेश में उपयोग नहीं कर सकता।
मैं सोच रहा हूँ क्यों तीन तरीकों से ऊपर काम नहीं किया था उल्लेख है जब मैं में एक ही मान का उल्लेख किया है server.xml
की app2
सेटिंग से truststore में सर्वर और एक ही मान
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
में app1
कार्यक्रम।
अधिक जानकारी के लिए यह है कि मैं कैसे कनेक्शन बना रहा हूं:
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
if (conn instanceof HttpsURLConnection) {
HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();
conn1.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
reply.load(conn1.getInputStream());
domainname
अपने आरएचईएल सर्वरों में ठीक से सेट किया तो समस्या दूर हो गई। आशा है कि यह किसी की मदद करता है।