"ওপেনসেল এস_স্লায়েন্ট" ব্যবহার করে একটি সার্ভারের এসএসএল / টিএলএস শংসাপত্র পান


17

আমি আমাদের লোড ব্যালেন্সারগুলির একটি (নেটস্কেলার) এর জন্য এসএসএল / টিএলএস শংসাপত্র পাওয়ার চেষ্টা করছি:

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

তবে এটি আমাকে শংসাপত্রটি প্রদর্শন করবে না:

CONNECTED(00000003)
write:errno=54

ব্যবহার -servername lb.example.comসাহায্য করে না, এবং আমাদের সিসাদমিন আমাকে জানিয়েছিল যে আমাদের লোড ব্যালান্সাররা যাইহোক এসএনআই ব্যবহার করে না।

সম্পাদনা করুন : সার্ভারটি আমাদের ইন্ট্রানেটে রয়েছে এবং পাবলিক ইন্টারনেট থেকে সংযোগ গ্রহণ করে না। এটি এর সাথে ওপেনসেলের আউটপুট -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
আপনি এটি সঠিক উপায়ে করছেন। তবে বর্তমান তথ্যের ভিত্তিতে কী ভুল হয়েছে তা বলা অসম্ভব: টিএলএস হ্যান্ডশেক ব্লক করা ফায়ারওয়াল হতে পারে, টিএলএস প্রোটোকলের সমস্যা হতে পারে ...। আপনি যদি লক্ষ্য হিসাবে হিসাবে ব্যবহার করার চেষ্টা করছেন (জনসাধারণের) ইউআরএল সরবরাহ করেন বা -debugআপনার প্রশ্নের সাথে পুরো ডিবাগ আউটপুট (বিকল্প ) যুক্ত করেন তবে এটি সহায়ক হতে পারে।
স্টেফেন অলরিচ

@ স্টেফেনআলরিচ যেমন বলেছিলেন এটি টিএলএস হতে পারে। ওপেনসেল একই ত্রুটি - এখানে সম্ভাব্য সমাধান দেখুন ।
জিনা

উত্তর:


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 তে কিছু অতিরিক্ত উপস্থাপিকা রয়েছে by বাইট 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 পজিশনে Their তাদের মানগুলি 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 বলুন। এটি বলা শক্ত এবং আমাদের সম্ভবত আরও তথ্যের প্রয়োজন।

আরও তথ্যের মধ্যে ওএস অন্তর্ভুক্ত থাকবে; ওপেনএসএসএল সংস্করণ; যদি আপনি ওপেনএসএসএল এর প্ল্যাটফর্মের সংস্করণটি ওপেনএসএসএল এর নিজস্ব সংস্করণ দিয়ে প্রতিস্থাপন করার চেষ্টা করেন; যদি কোনও ফায়ারওয়াল বা "ওয়েব পরিদর্শন" বাক্স বা অন্য মিডলওয়্যার সদর্থকতা চলছে; এবং সার্ভার কী গ্রহণ করে।


ব্যবহার -servername lb.example.comসাহায্য করে না, এবং আমাদের সিসাদমিন আমাকে জানিয়েছিল যে আমাদের লোড ব্যালান্সাররা যাইহোক এসএনআই ব্যবহার করে না।

এটি একরকম অস্বাভাবিক শোনায়। তবে এটি টিএলএসে সম্প্রসারণ, সুতরাং এটি ব্যবহার না করা হলে এটি উপেক্ষা করা হবে (এবং মারাত্মক সতর্কতা তৈরি করবে না)।

2016 এর থাম্বের নিয়ম: সর্বদা টিএলএস 1.0 বা তার বেশি ব্যবহার করুন এবং সর্বদা এসএনআই ব্যবহার করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.