"Opensl s_client" का उपयोग करके सर्वर का SSL / TLS प्रमाणपत्र प्राप्त करें


17

मैं हमारे लोड बैलेंसरों में से एक के लिए एसएसएल / टीएलएस प्रमाणपत्र प्राप्त करने का प्रयास कर रहा हूं:

openssl s_client -showcerts -connect lb.example.com:443

लेकिन यह मुझे प्रमाण पत्र नहीं दिखाएगा:

CONNECTED(00000003)
write:errno=54

उपयोग करना -servername lb.example.comमदद नहीं करता है, और हमारे sysadmin ने मुझे बताया कि हमारे लोड बैलेंसर्स एसएनआई का उपयोग नहीं करते हैं।

संपादित करें : सर्वर हमारे इंट्रानेट पर है और सार्वजनिक इंटरनेट से कनेक्शन स्वीकार नहीं करता है। इस के साथ खुलने का आउटपुट है -debug:

CONNECTED(00000003)
write to 0x7fec7af0abf0 [0x7fec7b803a00] (130 bytes => 130 (0x82))
0000 - 80 80 01 03 01 00 57 00-00 00 20 00 00 39 00 00   ......W... ..9..
0010 - 38 00 00 35 00 00 16 00-00 13 00 00 0a 07 00 c0   8..5............
0020 - 00 00 33 00 00 32 00 00-2f 00 00 9a 00 00 99 00   ..3..2../.......
0030 - 00 96 03 00 80 00 00 05-00 00 04 01 00 80 00 00   ................
0040 - 15 00 00 12 00 00 09 06-00 40 00 00 14 00 00 11   .........@......
0050 - 00 00 08 00 00 06 04 00-80 00 00 03 02 00 80 00   ................
0060 - 00 ff a6 f7 27 1a a7 18-85 cf b2 03 22 fc 48 3d   ....'.......".H=
0070 - dd a9 2c b7 76 67 62 80-df 85 ed 48 35 c7 d4 87   ..,.vgb....H5...
0080 - 8d d3                                             ..
read from 0x7fec7af0abf0 [0x7fec7b809000] (7 bytes => -1 (0xFFFFFFFFFFFFFFFF))
write:errno=54

और यह संबंधित आउटपुट है curl -v https://lb.example.com/:

$ curl -vI https://lb.exmple.com/
*   Trying 1.2.3.4...
* Connected to lb.exmple.com (10.1.2.3) port 443 (#0)
* TLS 1.2 connection using TLS_RSA_WITH_AES_256_CBC_SHA
* Server certificate: lb.example.com
* Server certificate: RapidSSL SHA256 CA - G2
* Server certificate: GeoTrust Primary Certification Authority - G3
> HEAD / HTTP/1.1
> Host: lb.exmple.com
> User-Agent: curl/7.43.0
> Accept: */*
>

किसी भी सुझाव के रूप में मैं कैसे प्रमाण पत्र का उपयोग कर प्राप्त कर सकते हैं openssl s_client?


2
आप इसे उचित तरीके से कर रहे हैं। लेकिन वर्तमान जानकारी के आधार पर यह कहना असंभव है कि क्या गलत है: टीएलएस हैंडशेक को अवरुद्ध करने वाला फ़ायरवॉल हो सकता है, टीएलएस प्रोटोकॉल समस्या हो सकती है ...। यदि आप या तो (सार्वजनिक) URL प्रदान करते हैं, तो आप लक्ष्य के रूप में उपयोग करने का प्रयास कर सकते हैं या -debugअपने प्रश्न में पूर्ण डिबग आउटपुट (विकल्प ) जोड़ सकते हैं।
स्टीफन उलरिच

जैसा कि @SteffenUllrich ने कहा कि यह TLS हो सकता है। Opensl को एक ही त्रुटि देखें - यहां संभव समाधान
ज़िना

जवाबों:


21

थोड़ी देर बाद मुझे पता चला: यह विशेष लोड बैलेंसर केवल TLSv1.2 का उपयोग करने के लिए कॉन्फ़िगर किया गया था, जिसे ओएस एक्स (0.9.8) में शामिल ओपनसेल का संस्करण समझ में नहीं आता है। मैंने होमब्रे का उपयोग करके ओपनस्एल (> = 1.0.1) का एक नया संस्करण स्थापित किया है ताकि यह काम करे:

/usr/local/opt/openssl/bin/openssl s_client -showcerts -connect lb.example.com:443

3

मैं हमारे लोड बैलेंसरों में से एक के लिए एसएसएल / टीएलएस प्रमाणपत्र प्राप्त करने का प्रयास कर रहा हूं:

 openssl s_client -showcerts -connect lb.example.com:443

यदि इसका आधुनिक विन्यास (इसका अर्थ क्या है, इस पर कुछ हाथ छूटना), उपयोग करें:

openssl s_client -connect lb.example.com:443 -tls1 -servername lb.example.com | \
openssl x509 -text -noout

CONNECTED(00000003)
write to 0x7fec7af0abf0 [0x7fec7b803a00] (130 bytes => 130 (0x82))
0000 - 80 80 01 03 01 00 57 00-00 00 20 00 00 39 00 00
...

ऐसा लगता है कि बाइट 0 पर कुछ अतिरिक्त प्रस्तावना है और 1. बाइट 2 में, एक रिकॉर्ड प्रकार होना चाहिए। बाइट 3 और 4 पर एक वर्जन नंबर होना चाहिए। बाइट्स 5 और 6 पेलोड की 16-बिट लंबाई होनी चाहिए।

यहाँ एक काम कर उदाहरण है:

$ openssl s_client -connect www.googl.com:443 -tls1 -servername www.googl.com -debug
CONNECTED(00000005)
write to 0x7f7fe1c1fa30 [0x7f7fe2022000] (132 bytes => 132 (0x84))
0000 - 16 03 01 00 7f 01 00 00-7b 03 01 71 c0 12 35 98
...

ऊपर से, रिकॉर्ड प्रकार स्थिति 0 पर है, और इसका मान 0x16 है। 0x16 हैंडशेक प्रकार है। रिकॉर्ड परत संस्करण 2 और 3 पदों पर अगले दो बाइट्स हैं 0x03 0x01। उनके मान हैं । पेलोड की लंबाई है 0x007f

इसके अलावा RFC 5246, द ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) प्रोटोकॉल संस्करण 1.2 , पृष्ठ 18: देखें

6.2.1.  Fragmentation

   The record layer fragments information blocks into TLSPlaintext
   records carrying data in chunks of 2^14 bytes or less.  Client
   message boundaries are not preserved in the record layer (i.e.,
   multiple client messages of the same ContentType MAY be coalesced
   into a single TLSPlaintext record, or a single message MAY be
   fragmented across several records).

      struct {
          uint8 major;
          uint8 minor;
      } ProtocolVersion;

      enum {
          change_cipher_spec(20), alert(21), handshake(22),
          application_data(23), (255)
      } ContentType;

      struct {
          ContentType type;
          ProtocolVersion version;
          uint16 length;
          opaque fragment[TLSPlaintext.length];
      } TLSPlaintext;

आपकी समस्या पुराने SSLv2 संगत रिकॉर्ड प्रकार हो सकती है। या यह ओपनएसएसएल के नीचे के स्तर का संस्करण हो सकता है, 0.9.5 या 0.9.8 का कहना है। यह कहना मुश्किल है, और हमें शायद अधिक जानकारी की आवश्यकता है।

अधिक जानकारी में OS शामिल होगा; ओपनएसएसएल संस्करण; यदि आपने ओपनएसएसएल के प्लेटफॉर्म संस्करण को ओपनएसएसएल के अपने संस्करण के साथ बदलने का प्रयास किया है; अगर वहाँ एक फ़ायरवॉल या "वेब निरीक्षण" बॉक्स या अन्य मिडलवेयर अच्छाई चल रही है; और सर्वर को क्या प्राप्त होता है।


उपयोग करना -servername lb.example.comमदद नहीं करता है, और हमारे sysadmin ने मुझे बताया कि हमारे लोड बैलेंसर्स एसएनआई का उपयोग नहीं करते हैं।

यह असामान्य लगता है। लेकिन इसका टीएलएस के लिए एक विस्तार, इसलिए इसकी उपेक्षा की जाती है यदि इसका उपयोग नहीं किया जाता है (और घातक चेतावनी का उत्पादन नहीं करेगा)।

2016 में अंगूठे का नियम: हमेशा टीएलएस 1.0 या इसके बाद के संस्करण का उपयोग करें, और हमेशा एसएनआई का उपयोग करें।

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