ओपनएसएसएल: डीएच पैरामीटर प्रदर्शित करें


14

SSL सिफर का उपयोग करते समय एक डिफरेंशियल हेलमैन कुंजी एक्सचेंज पर निर्भर करते हुए, उस कुंजी एक्सचेंज की सुरक्षा के लिए नियोजित निजी कुंजी का आकार महत्वपूर्ण महत्व है।

जब मैं "Opensl s_client" टूल का उपयोग करके सर्वर से कनेक्ट करता हूं, तो मैं उपयोग किए गए डीएच मापदंडों को कैसे क्वेरी कर सकता हूं?

जवाबों:


16

मैं कमांड-लाइन स्विच का उपयोग करना आसान नहीं जानता, लेकिन में 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 के लिए तय है, क्योंकि ग्राहक उन वक्रों की सटीक सूची निर्दिष्ट कर सकता है जो स्वीकार करता है) ।


1
OpenSSL DHE को स्वतः-प्रदर्शित नहीं करता है, लेकिन ऐप कॉलबैक कर सकता है। ओपनएसएसएल 1.0.2 (जनवरी 2015) वैकल्पिक रूप से ऑटोज्लेक्ट कर सकता है ECDHE , और 1.0.2 में भी s_client हमेशा "Temp सर्वर कुंजी" DH & amp; आकार या ECDH & amp; वक्र तब प्रदर्शित होता है, जब लागू हो, "हैंडशेक ने x और लिखित y" पढ़ा है, इसलिए अब आपको इसे डिकोड करने की आवश्यकता नहीं है। यह हाल ही का है अपाचे mod_ssl कि ऑटोज़ेन्स डीएचई: httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile (जो जावा क्लाइंट के बारे में समस्या नोट करता है)।
dave_thompson_085

मैं Opensl 1.0.1 का उपयोग करता हूं और मुझे कोई नहीं मिलता है ServerKeyExchange साथ में 0c 00 03 0b। क्या आप आउटपुट प्राप्त करने के लिए सटीक कमांड दे सकते हैं? मेरे पास कोई भी हैंडशेक नहीं है, जिसके साथ मैं शुरू करता हूं 0c
rubo77

यदि सर्वर द्वारा चयनित सिफर सूट "DHE" या "ECHDE" सिफर सूट नहीं है, तो कोई ServerKeyExchange संदेश नहीं होगा।
Thomas Pornin

मुझे & lt; & lt; & lt; TLS 1.2 हैंडशेक [लंबाई 01cd], ServerKeyExchange 0c 00 01 c9 03 00 17 41 04 08 88 5e 82 88 1e e5 b6 443 ऑक्टेट के बाद जो 0x1cc की लंबाई के अनुरूप है जो पांचवें ऑक्टेट से शुरू होता है। हालांकि "0300" का अर्थ 768 ओकटेट्स है, जबकि मुझे लगता है कि मेरा डीएच परम "केवल" 2048 बिट्स है।
Law29

1
@ Law29 यह अधिक ECDHE ServerKeyExchange की तरह दिखता है। यदि अण्डाकार वक्र का उपयोग कर रहे हैं, तो "03" का अर्थ है "यह एक नामित वक्र है, अगले दो बाइट्स वक्र पहचानकर्ता को सांकेतिक शब्दों में बदलना"। फिर "00 17" वक्र पहचानकर्ता है, जो NIST P-256 (ECDHE के लिए सबसे अधिक इस्तेमाल किया जाने वाला वक्र) है। फिर "41" सार्वजनिक बिंदु की लंबाई है, जो कि असम्पीडित प्रारूप में P-256 बिंदु के लिए सही मूल्य है; इस तरह का एक बिंदु 0x04 मान के बाइट के साथ शुरू होगा, और ठीक यही आपके पास है। योग करने के लिए: ऐसा लगता है कि आपका टीएलएस 1.2 हैंडशेक वास्तव में ईसीडीएच का उपयोग करता है, डीएचईई का नहीं।
Thomas Pornin

8

यदि आपके पास PEM प्रारूप में प्रमाण पत्र है, तो आप इस कमांड को आज़मा सकते हैं, यह आपको Openssl कमांड से एक उचित आउटपुट देना चाहिए।

openssl dhparam -inform PEM -in ./imapd.pem -check -text

(Sample output)
    PKCS#3 DH Parameters: (512 bit)
        prime:
            xx:xx:xx:xx
            xx:xx:xx:xx
            xx:xx:xx:xx
        generator: 2 (0x2)
DH parameters appear to be ok.
-----BEGIN DH PARAMETERS-----
XXXX
XXXX
-----END DH PARAMETERS-----

आशा है कि यह आप के लिए क्या देख रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.