मैं एक जावा प्रोग्राम एक वेबसर्वर SSL/TLS का उपयोग कर को जोड़ता है, और कहा कि कनेक्शन पर विभिन्न HTTP अनुरोध भेजता है है अनदेखी के बावजूद handshake_failure। सर्वर लोकलहोस्ट है और एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग कर रहा है, लेकिन मेरा कोड कस्टम ट्रस्टमेनर्स का उपयोग कर रहा है, और अमान्य प्रमाणपत्रों को अनदेखा करता है। यह अब तक पूरी तरह से काम किया है।प्राप्त SSLHandshakeException: मेरे मुवक्किल सभी प्रमाणपत्र
सर्वर पर एकमात्र अंतर यह है कि यह jboss 6 चलाने के लिए प्रयुक्त होता है और अब यह jboss 7 चला रहा है। मुझे यकीन नहीं है कि यह एक कॉन्फ़िगरेशन समस्या है, या क्या मेरे कोड में कोई समस्या है, लेकिन मुझे मिलता है यदि मैं अन्य जावा-आधारित प्रोग्राम्स जैसे WebScarab या ZAP का उपयोग करके कनेक्ट करने का प्रयास करता हूं तो वही त्रुटियां।
किसी भी मामले में, वहाँ इस समस्या को हल पाने के लिए कुछ भी मैं अपने कोड के लिए कर सकते हैं?
Received fatal alert: handshake_failure
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
यहाँ असफलता से पहले डिबग संदेशों हैं:: यहाँ पूर्ण में त्रुटि है
main, WRITE: TLSv1 Handshake, length = 75
main, WRITE: SSLv2 client hello message, length = 101
main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1 ALERT: fatal, handshake_failure
आपको इसमें रुचि हो सकती है: http://stackoverflow.com/a/4686924/372643 – Bruno
@ ब्रूनो हाँ, मैंने देखा कि पहले Google को खोजते समय। क्या यह जावा में एक बग है? जब मैं SSLContext को TLS के रूप में निर्दिष्ट करता हूं तो मैं नहीं देख सकता कि यह डिफ़ॉल्ट व्यवहार कैसे हो सकता/सकती है। – Rsaesha
यह एक बग नहीं है, यह डिज़ाइन द्वारा है (एसएसएलवी 2 पिछड़ा कंप के लिए है।)। [जेएसएसई रेफ/एसएसएल कॉन्टेक्स्ट] देखें (http://docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#SSLContext): "* उदाहरण के लिए, getInstance (" SSLv3 ") एक उदाहरण लौटा सकता है जो "एसएसएलवी 3" और "टीएलएसवी 1" * लागू करता है [...] आप सेट कर सकते हैं कि कौन से प्रोटोकॉल वास्तव में एक एसएसएल कनेक्शन के लिए विधि सेटएन्टेबल प्रोटोकॉल (स्ट्रिंग [] प्रोटोकॉल) का उपयोग करके सक्षम हैं "। आपके मामले में, 'https.protocols' 'HttpsURLConnection' के लिए 'setEnabledProtocols' का ख्याल रखता है। – Bruno