2012-03-03 16 views
6

में कोई सिफ़र सुइट निर्देश here बाद और प्रमाणपत्र है कि मैं पहले से गलत तरीके से बनाई निर्मित। कुछ बदल गया है क्योंकि अब मैं सर्वर पर javax.net.ssl.SSLHandshakeException: no cipher suites in common देख रहा हूं और क्लाइंट पर javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure देख रहा हूं। त्रुटियों this questionSSLHandshakeException: आम

सर्वर ClassFileServer.java है और संबंधित ग्राहक

अच्छी तरह से खेलने के लिए दोनों सिरों हो रही पर कोई सुझाव दिए गए करने के बजाय, ध्यान दें कि मैं स्थानीय होस्ट तो मैं सिफर क्षमताओं ही कर रहे हैं ग्रहण करेंगे का उपयोग कर रहा हूँ।


अद्यतन:

ये कदम उठाएँ मैं फ़ाइलों को उत्पन्न करने के लिए प्रयोग किया है, मैं कुंजी और truststore .:

सर्वर पर भ्रमित किया जा सकता है (this गाइड द्वारा निम्नलिखित) :

$ keytool -genkey -alias serverkey -keyalg RSA -keypass [email protected] -storepass [email protected] -keystore keystore.jks

$ keytool -export -alias serverkey -storepass [email protected] -file server.cer -keystore keystore.jks

$ keytool -import -v -trustcacerts -alias clientkey -file ../client/client.cer -keystore cacerts.jks -keypass [email protected] -storepass [email protected]

क्लाइंट साइड (this गाइड द्वारा) पर:

$ keytool -genkey -alias clientkey -keyalg RSA -keypass changeit -storepass changeit -keystore keystore.jks

$ keytool -export -alias clientkey -storepass changeit -file client.cer -keystore keystore.jks

$ keytool -import -v -trustcacerts -alias serverkey -file ../server/server.cer -keystore cacerts.jks -keypass changeit -storepass changeit

के रूप में डिबगिंग शरीर को पार कर दूसरे माध्यम का इस्तेमाल करना पड़ा इस साइट की सीमा:

क्लाइंट डीबग त्रुटि:http://pastebin.com/mHCmEqAk

सर्वर डीबग त्रुटि:http://pastebin.com/YZbh7H8f

उत्तर

4
javax.net.ssl.SSLHandshakeException: no cipher suites in common 

यह दो कारण हैं:

  1. सर्वर एक निजी कुंजी नहीं है और प्रमाण पत्र, और संभवतः एक कीस्टोर नहीं है। ऐसे मामले में यह केवल असुरक्षित अज्ञात सिफर सूट का उपयोग कर सकता है, जो डिफ़ॉल्ट रूप से अक्षम होते हैं, और इस तरह से रहना चाहिए। तो कोई सिफर सुइट नहीं है जो क्लाइंट के साथ उपयोग करने के लिए सहमत हो सकता है। ग्राहक या सर्वर या दोनों में ऐसी कोई समझौता नहीं किया जा सकता है कि द्वारा लगाए गए सिफ़र सुइट पर

  2. अत्यधिक प्रतिबंध।

अपने keystores और truststores पुन, वह सब ठीक लग रहा है, सिवाय इसके कि आप चार आयात चरणों कर रहे हैं जहां केवल दो की जरूरत है। आपको सर्वर के प्रमाण पत्र को सर्वर के अपने ट्रस्टस्टोर में या ग्राहक के प्रमाणपत्र को क्लाइंट के ट्रस्टस्टोर में आयात करने की आवश्यकता नहीं है।आप केवल यह की जरूरत है:

सर्वर:

$ keytool -import -v -trustcacerts -alias clientkey -file ../client/client.cer -keystore cacerts.jks -keypass [email protected] -storepass [email protected] 

ग्राहक:

$ keytool -import -v -trustcacerts -alias serverkey -file ../server/server.cer -keystore cacerts.jks -keypass changeit -storepass changeit 

और क्योंकि आप एक स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग कर रहे आप केवल जरूरत है। सरल समाधान: नहीं। एक सीए-हस्ताक्षरित प्रमाणपत्र का उपयोग करें, जो जावा के साथ भेजे गए डिफ़ॉल्ट ट्रस्टस्टोर द्वारा भरोसा किया जाता है।

+0

मैं बाहरी हटाया प्रविष्टियां और मुझे अभी भी एक ही त्रुटि मिल रही है। मैंने यहां टिप्पणी के प्रति कीस्टोर में संबंधित कैर्ट आयात करने का प्रयास किया: http://stackoverflow.com/questions/9547980/unable-to-find-valid-certification-path-to-requested-target-and-certificate-unkn# comment12099962_9547980। मैं अभी भी ट्रस्ट और कीस्टोरों को भ्रमित कर सकता हूं। साथ ही, कृपया ध्यान दें कि ये स्वयं हस्ताक्षरित प्रमाणपत्र हैं। – Astron

+1

@Astron (1) क्या आपने 'testkeys' के बजाय संबंधित कीस्टोर लोड करने के लिए कोड लाइन 'ks.load (new fileInputStream ("testkeys"), passphrase) को बदल दिया है, और (2) क्या आप क्लाइंट को साथ चला सकते हैं - Djavax.net.debug = एसएसएल, हैंडशेक और परिणाम को अपनी पोस्ट में संपादित करें। – EJP

+1

ट्रस्टस्टोर को क्लाइंट/सर्वर के लिए निर्दिष्ट करने की आवश्यकता है क्योंकि वे डिफ़ॉल्ट ट्रस्टस्टोर का उपयोग कर रहे हैं, जिससे विफलता आती है। -Djavax.net.ssl.trustStore =/home/share/samples/sockets/client/cacerts.jks -Djavax.net.ssl.trustStorePassword = क्लाइंट पर परिवर्तन और सर्वर के लिए समान संबंधित कोड सत्र को पूरा करने की अनुमति देता है। अजीब बात यह है कि एप्लिकेशन क्लाइंट प्रमाणीकरण का समर्थन करता है लेकिन क्लाइंट/सर्वर कोड में ट्रस्टस्टोर प्रावधान नहीं है। डीबगिंग जानकारी के लिए धन्यवाद, जिसने काफी मदद की! आपके उत्तर देने के लिए डिबगिंग अनुशंसा जोड़ें। – Astron

2

मुझे कैसंड्रा क्लस्टर पर SSL सेट करते समय यह त्रुटि मिली।

keytool -genkey -alias -keystore .keystore

यह एल्गोरिथ्म के रूप में आरएसए के विनिर्देश को छोड़ देता है, होना चाहिए (see v1.2 docs):: समस्या निकला जब कुंजी पैदा करने का वर्णन version 2.0 के दस्तावेज में होने की

keytool -genkey -alias -keyalg RSA -keystore .keystore

संबंधित मुद्दे