मैं कमांड-लाइन स्विच का उपयोग करना आसान नहीं जानता, लेकिन में openssl s_client
कमांड लाइन, आप जोड़ सकते हैं -msg
हैंडशेक संदेश के हेक्साडेसिमल डंप प्राप्त करने का विकल्प। फिर तलाश करें ServerKeyExchange
संदेश; इसे ऐसा दिखना चाहिए:
<<< TLS 1.2 Handshake [length 030f], ServerKeyExchange
0c 00 03 0b 01 00 ff ff ff ff ff ff ff ff c9 0f
da a2 21 68 c2 34 c4 c6 62 8b 80 dc 1c d1 29 02
4e 08 8a 67 cc 74 02 0b be a6 3b 13 9b 22 51 4a
(...)
और यह इस तरह से पढ़ता है:
0c 00 03 0b
: प्रकार का संदेश "ServerKeyExchange" (यह "0c") लंबाई 0x00030B बाइट्स का है।
- पहला तत्व डीएच मॉडुलस एक बड़े पूर्णांक के रूप में है, जिसमें दो-बाइट लंबाई हेडर है। यहाँ, लंबाई एन्कोडेड है
01 00
, जिसका अर्थ है एक पूर्णांक 0x0100 बाइट्स से अधिक एन्कोडेड। यह 256 बाइट्स है, इसलिए मापांक की लंबाई 2041 और 2048 बिट्स के बीच है।
- मापांक बाइट्स, अहस्ताक्षरित बड़े-एंडियन क्रम में अनुसरण करता है। उस मापांक के शीर्ष बाइट्स, इस मामले में,
ff ff ff ff...
। मापांक की लंबाई 2048 बिट्स है।
यदि आप ECDHE सिफर सूट (अण्डाकार वक्र) का उपयोग करते हैं, तो ए ServerKeyExchange
प्रारूप निश्चित रूप से अलग है।
देख मानक की परिभाषा के लिए ServerKeyExchange
संदेश। डीएचई सिफर स्वीट्स के लिए, इसमें मापांक होता है पी , जनरेटर जी और सर्वर डीएच सार्वजनिक कुंजी y उस क्रम में, प्रत्येक को ऊपर वर्णित प्रारूप में एक बड़ा पूर्णांक के रूप में व्यक्त किया गया (16-बिट हेडर जिसमें बाइट्स में लंबाई होती है, तो अहस्ताक्षरित बड़े-एंडियन एन्कोडिंग में पूर्णांक मान)।
हाल के ओपनएसएसएल संस्करण एक डीएच मापांक आकार का चयन करते हैं, जो सर्वर के प्रमुख जोड़े की ताकत से मेल खाता है (सुरक्षा के दृष्टिकोण से) संकेत ServerKeyExchange
संदेश)। ऊपर दिए गए उदाहरण में, सर्वर में 2048-बिट RSA कुंजी है, इसलिए OpenSSL को 2048-बिट डीएच मापांक (इस मामले में, जाने-माने मापांक में वर्णित है) का उपयोग करने के लिए चुना गया है। आरएफसी 3526, धारा 3 )।
कुछ अन्य सर्वर 1024-बिट डीएच समूहों से चिपके रहते हैं ताकि कुछ मौजूदा ग्राहकों के साथ संगतता सुनिश्चित की जा सके जो बड़े डीएच समूहों का समर्थन नहीं करते हैं (जावा में एसएसएल कार्यान्वयन के लिए सबसे बड़ा अपराधी, फिक्स्ड) जावा 8 में 56 का निर्माण 2012 में)। डीएचई सिफर स्वीट्स के लिए टीएलएस प्रोटोकॉल में एक ज्ञात दोष यह है कि क्लाइंट के पास यह निर्दिष्ट करने का कोई तरीका नहीं है कि यह किस मापांक के आकार का समर्थन कर सकता है (यह ECDHE के लिए तय है, क्योंकि ग्राहक उन वक्रों की सटीक सूची निर्दिष्ट कर सकता है जो स्वीकार करता है) ।
s_client
हमेशा "Temp सर्वर कुंजी" DH & amp; आकार या ECDH & amp; वक्र तब प्रदर्शित होता है, जब लागू हो, "हैंडशेक ने x और लिखित y" पढ़ा है, इसलिए अब आपको इसे डिकोड करने की आवश्यकता नहीं है। यह हाल ही का है अपाचे mod_ssl कि ऑटोज़ेन्स डीएचई: httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile (जो जावा क्लाइंट के बारे में समस्या नोट करता है)।