मैं आरईएसटी एपीआई के साथ साइट पर अनुरोध प्राप्त करने का प्रयास कर रहा हूं। हालांकि इसे जोड़ने का लिंक एक आईपी पता है और मुझे मिल रहा है:

Javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX पथ निर्माण विफल: sun.security.provider.certpath.SunCertPathBuilderException: अनुरोधित लक्ष्य के लिए मान्य प्रमाणन पथ खोजने में असमर्थ

जब मैं ब्राउज़र में उसी सटीक लिंक का उपयोग करता हूं, तो यह काम करता है।

कैसे मैं इस मुद्दे को हल कर सकता हूँ?

नीचे मेरा कोड है:

public static void main(String[] args) {

    System.getProperties().put( "proxySet", "true" );
    System.getProperties().put( "socksProxyHost", "xxx.xxx.xxx.xxx" );
    System.getProperties().put( "socksProxyPort", "xxxx" );


    URL requestLink = ismTicketManager.UrlEncode.convertToURLEscapingIllegalCharacters("https://xx.xx.xx.xx/e/528f5016-6fd9-403f-85e4-5a54bb2498b9/api/v1/problem/feed?relativeTime=30mins&Api-Token=xxxxx");

    try {
        HttpURLConnection targetConn = (HttpURLConnection)requestLink.openConnection();
        targetConn.setRequestMethod("GET");
        System.out.println(targetConn.getResponseCode());
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Connection failed");
    }

    static {
    HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("127.0.0.1"));
}

}

मैंने फ़ायरफ़ॉक्स से प्रमाणपत्र निर्यात किया और इसे cacerts फ़ाइल में आयात किया: cacerts फ़ाइल सूची इस तरह दिखती है:

रेस्टापी, 25-सितंबर-2018, TrustedCertEntry, प्रमाणपत्र फ़िंगरप्रिंट (SHA1): AB:6D:C6:2E:9F:B3:D9:48:1E:A9:84:AA:DD:03:64:1D:7C: 08:42: सीई

इसे कैसे हल किया जा सकता है?

संपादित करें: गिलाउम के लिए धन्यवाद हल किया गया। मेरी समस्या यह थी कि मेरे पास प्रोग्राम फाइल/जेडीके और प्रोग्राम फाइल/जेआरई है। मैं JDK में cacerts फ़ाइल में आयात कर रहा था, जबकि ग्रहण JRE का उपयोग कर रहा था। यह -Djavax.net.debug=ssl VM तर्क के लिए धन्यवाद की खोज की गई थी।

इसके अलावा आईपी:

static {
    HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("10.31.17.38"));
}

वेरिएबल रिक्वेस्ट लिंक में से एक के बराबर होना चाहिए जिसका मैं उपयोग कर रहा हूं। वास्तव में जब मैंने ऐसा नहीं किया, तो मुझे ठीक यही बताते हुए एक त्रुटि हुई।

1
GohanCZ 25 सितंबर 2018, 15:47

1 उत्तर

सबसे बढ़िया उत्तर

यह हो सकता है कि वेबसाइट पूर्ण प्रमाणन पथ (रूट सहित) न भेजे। इस VM विकल्प को जोड़ने का प्रयास करें: -Dcom.sun.security.enableAIAcaIssuers=true

जावा प्रोग्राम को कमांड लाइन से लॉन्च करते समय, आपका कमांड इस तरह दिखना चाहिए (जैसा कि Oracle doc)

java -Dcom.sun.security.enableAIAcaIssuers=true <Main Class>

एक्लिप्स से लॉन्च करते समय विकल्प "वीएम तर्क:" के तहत जोड़ा जाना चाहिए

0
Guillaume 25 सितंबर 2018, 16:12