2012-11-28 22 views
8

मैं Ubuntu 12.04 पर OpenSSL 1.0.1 में एक गंभीर बग का सामना किया है:ओपनएसएसएल 1.0.1 हैंडशेक वर्कअराउंड?

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=665452

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666051 < - दिनांकित अक्टू 3 2012!

इसका सारांश यह है कि मैं कुछ सर्वर से कनेक्ट करने में सक्षम हूं लेकिन दूसरों को नहीं। गूगल से कनेक्ट हो रहा काम करता है:

openssl s_client -connect mail.google.com:443 -debug -state -msg -CAfile /etc/ssl/certs/ca-certificates.crt

... 
Protocol : TLSv1.1 
Cipher : ECDHE-RSA-RC4-SHA 
Session-ID: 94DB1AC8531115C501434B16A5E9B735722768581778E4FEA4D9B19988551397 
Session-ID-ctx: 
Master-Key: 8694BF510CD7568CBAB39ECFD32D115C511529871F3030B67A4F7AEAF957D714D3E94E4CE6117F686C975EFF21FB8708 
Key-Arg : None 
PSK identity: None 
PSK identity hint: None 
SRP username: None 
TLS session ticket lifetime hint: 100800 (seconds) 
TLS session ticket: 
0000 - fb 52 d6 d3 3c a8 75 e1-1f 1d f6 23 ab ce 55 44 .R..<.u....#..UD 
0010 - 27 bf ad c4 7a 0d 83 c8-48 59 48 4b 39 bb 3c c7 '...z...HYHK9.<. 
0020 - 01 1e ad b3 13 de 65 d4-e8 ea e4 35 89 83 55 8e ......e....5..U. 
0030 - e4 d5 9f 60 58 51 33 9b-83 34 b9 35 3d 46 cb a3 ...`XQ3..4.5=F.. 
0040 - 35 7b 48 5d 7b 86 5c d5-a1 14 9d 8c 3e 93 eb fb 5{H]{.\.....>... 
0050 - ac 78 75 72 9b d2 bc 67-f2 fa 5b 75 80 a6 31 d8 .xur...g..[u..1. 
0060 - 71 15 85 7f 55 4d dc fb-b0 b5 33 db 6d 36 8c c6 q...UM....3.m6.. 
0070 - e8 f9 54 7a 29 69 87 2c-dd f3 c5 cf 26 55 6f 6e ..Tz)i.,....&Uon 
0080 - 45 73 7a 1d e4 b3 be b2-92 3f 0b ed c4 1c a5 24 Esz......?.....$ 
0090 - 3c f0 ca a5          <... 

Start Time: 1354063165 
Timeout : 300 (sec) 
Verify return code: 0 (ok) 

लेकिन से कनेक्ट कर रहा फेसबुक नहीं है:

openssl s_client- कनेक्ट ग्राफ.facebook.com:443 -debug -state -msg -CAfile /etc/ssl/certs/ca-certificates.crt -cipher एसआरपी-एईएस -256-सीबीसी- SHA

CONNECTED(00000003) 
SSL_connect:before/connect initialization 
write to 0xddd2c0 [0xddd340] (64 bytes => 64 (0x40)) 
0000 - 16 03 01 00 3b 01 00 00-37 03 02 50 b5 5d 75 42 ....;...7..P.]uB 
0010 - c2 78 55 49 b5 2e de 4f-00 a6 a8 d5 cf 10 92 44 .xUI...O.......D 
0020 - 28 62 34 d6 61 5e 88 c3-68 8b 96 00 00 04 c0 20 (b4.a^..h...... 
0030 - 00 ff 02 01 00 00 09 00-23 00 00 00 0f 00 01 01 ........#....... 
>>> TLS 1.1 [length 003b] 
    01 00 00 37 03 02 50 b5 5d 75 42 c2 78 55 49 b5 
    2e de 4f 00 a6 a8 d5 cf 10 92 44 28 62 34 d6 61 
    5e 88 c3 68 8b 96 00 00 04 c0 20 00 ff 02 01 00 
    00 09 00 23 00 00 00 0f 00 01 01 
SSL_connect:unknown state 
read from 0xddd2c0 [0xde28a0] (7 bytes => 7 (0x7)) 
0000 - 15 03 02 00 02 02 28        ......(
SSL3 alert read:fatal:handshake failure 
<<< TLS 1.1 [length 0002] 
    02 28 
SSL_connect:error in unknown state 
140581179446944:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:724: 
--- 
no peer certificate available 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 7 bytes and written 64 bytes 
--- 
New, (NONE), Cipher is (NONE) 
Secure Renegotiation IS NOT supported 
Compression: NONE 
Expansion: NONE 

फेसबुक कनेक्शन या तो ग्राहक अपने हैलो बफर भेजता है और कभी भी सर्वर हैलो प्रतिक्रिया प्राप्त नहीं करता है, या अगर मैं एक सिफर में प्रवेश करता हूं तो एक त्रुटि कोड के साथ रिटर्न देता है। यह -tls1 और -ssl3 दोनों के साथ होता है। मैंने खोलने के लिए हर पैरामीटर की कोशिश की है जिसे मैं सोच सकता हूं।

apt-कैश showpkg openssl

... 
Provides: 
1.0.1-4ubuntu5.5 - 
1.0.1-4ubuntu5.3 - 
1.0.1-4ubuntu3 - 

मैं भी हर पैरामीटर मैं कर्ल के, लेकिन कोई सफलता के साथ सोच सकते हैं की कोशिश की है, क्योंकि यह हुड के नीचे openssl उपयोग करता है।

मुझे चिंता है कि उबंटू सुरक्षित कनेक्शन स्थापित नहीं कर सकता (एक आश्चर्यजनक बयान, मुझे एहसास है)। इस समस्या के खिलाफ मेरे सिर को मारने के दो ठोस दिनों के बाद, मैं मूल रूप से इस बिंदु पर प्रार्थना कर रहा हूं कि कोई कामकाज जानता है। मैं ओपनएसएसएल 1.0.0 में डाउनग्रेड पर विचार कर रहा हूं या इसके बजाय libuturl4-dev का उपयोग gnutls-dev के साथ कर रहा हूं। दोनों समाधान मेरे मुंह में एक सड़ा हुआ स्वाद छोड़ देते हैं। आपकी किसी भी सहायताके लिए पहले से शुक्रिया।

पीएस यह सब काम इतना है कि मेरा सर्वर बाहरी https REST API के साथ इंटरफ़ेस कर सकता है। मैं आज किसी भी वेबसर्वर में यह एक मौलिक आवश्यकता मानता हूं, कोई बहाना नहीं।

अद्यतन: यहां एक सिफर पास किए बिना मेरा आउटपुट है। अगर मैं पारित यह कोई फर्क नहीं पड़ता -CAfile या नहीं या तो:

openssl s_client -connect graph.facebook.com:443 -debug -state -msg -CAfile /etc/ssl/certs/ca-certificates.crt

CONNECTED(00000003) 
SSL_connect:before/connect initialization 
write to 0x14ed1a0 [0x1515bf0] (226 bytes => 226 (0xE2)) 
0000 - 16 03 01 00 dd 01 00 00-d9 03 02 50 b6 39 78 6a ...........P.9xj 
0010 - 24 95 8e dc 62 19 37 4b-ab 77 b8 66 cd 48 ba a2 $...b.7K.w.f.H.. 
0020 - a1 2a f8 1d f8 c9 5d fb-9d db 84 00 00 66 c0 14 .*....]......f.. 
0030 - c0 0a c0 22 c0 21 00 39-00 38 00 88 00 87 c0 0f ...".!.9.8...... 
0040 - c0 05 00 35 00 84 c0 12-c0 08 c0 1c c0 1b 00 16 ...5............ 
0050 - 00 13 c0 0d c0 03 00 0a-c0 13 c0 09 c0 1f c0 1e ................ 
0060 - 00 33 00 32 00 9a 00 99-00 45 00 44 c0 0e c0 04 .3.2.....E.D.... 
0070 - 00 2f 00 96 00 41 c0 11-c0 07 c0 0c c0 02 00 05 ./...A.......... 
0080 - 00 04 00 15 00 12 00 09-00 14 00 11 00 08 00 06 ................ 
0090 - 00 03 00 ff 02 01 00 00-49 00 0b 00 04 03 00 01 ........I....... 
00a0 - 02 00 0a 00 34 00 32 00-0e 00 0d 00 19 00 0b 00 ....4.2......... 
00b0 - 0c 00 18 00 09 00 0a 00-16 00 17 00 08 00 06 00 ................ 
00c0 - 07 00 14 00 15 00 04 00-05 00 12 00 13 00 01 00 ................ 
00d0 - 02 00 03 00 0f 00 10 00-11 00 23 00 00 00 0f 00 ..........#..... 
00e0 - 01 01            .. 
>>> TLS 1.1 [length 00dd] 
    01 00 00 d9 03 02 50 b6 39 78 6a 24 95 8e dc 62 
    19 37 4b ab 77 b8 66 cd 48 ba a2 a1 2a f8 1d f8 
    c9 5d fb 9d db 84 00 00 66 c0 14 c0 0a c0 22 c0 
    21 00 39 00 38 00 88 00 87 c0 0f c0 05 00 35 00 
    84 c0 12 c0 08 c0 1c c0 1b 00 16 00 13 c0 0d c0 
    03 00 0a c0 13 c0 09 c0 1f c0 1e 00 33 00 32 00 
    9a 00 99 00 45 00 44 c0 0e c0 04 00 2f 00 96 00 
    41 c0 11 c0 07 c0 0c c0 02 00 05 00 04 00 15 00 
    12 00 09 00 14 00 11 00 08 00 06 00 03 00 ff 02 
    01 00 00 49 00 0b 00 04 03 00 01 02 00 0a 00 34 
    00 32 00 0e 00 0d 00 19 00 0b 00 0c 00 18 00 09 
    00 0a 00 16 00 17 00 08 00 06 00 07 00 14 00 15 
    00 04 00 05 00 12 00 13 00 01 00 02 00 03 00 0f 
    00 10 00 11 00 23 00 00 00 0f 00 01 01 
SSL_connect:unknown state 
+1

क्यों 'एससीपी-एईएस -256-सीबीसी-एसएचए'? – Marek

+0

मैं किसी भी प्रतिक्रिया प्राप्त करने के लिए अलग-अलग सिफर की कोशिश कर रहा था। एक सिफर के बिना, यह क्लाइंट हैलो भेजने के बाद लटकता है और मुझे कभी भी बाइट वापस नहीं मिलता है। –

+1

मेरे लिए काम करता है: http://pastebin.com/MXk7NPC5 –

उत्तर

15

जब graph.facebook.com से कनेक्ट कर तुम क्यों -cipher SRP-AES-256-CBC-SHA गुजर रहे हैं? फेसबुक निश्चित रूप से एसआरपी का समर्थन नहीं करता है: http://srp.stanford.edu/

यदि आप इसे पास नहीं करते हैं तो यह काम करता है?

इसके अलावा, क्या आप आईपी पता दे रहे हैं जो आप प्राप्त कर रहे हैं? 69.171.229.17 के साथ, मैं उस सटीक क्लाइंटहेल्लो (मॉड्यूलो नॉनसे और आरसी 4-एसएचए के साथ एकमात्र सिफर एससीएसवी को बचा सकता हूं) का पुनरुत्पादन कर सकता हूं और मुझे एक सफल हैंडशेक मिलता है।

आखिरकार, क्या आपने कहीं और एक एसएसएच सुरंग पर करने की कोशिश की है? अफसोस की बात है, जब क्रोम में टीएलएस सुविधाओं को तैनात करते हैं तो हमने बार-बार नेटवर्किंग हार्डवेयर पाया है जो टीएलएस कनेक्शन तोड़ता है।(हालांकि मैं किसी ऐसे मामले के बारे में नहीं सोच सकता जहां तक ​​हार्डवेयर सक्रिय रूप से कनेक्शन को सेंसर करने की कोशिश नहीं कर रहा था।)

+2

आपके एसओ कैरियर के लिए कोई बुरा शुरुआत नहीं है। :-) – ceejayoz

+0

इससे कोई फर्क नहीं पड़ता कि मैं graph.facebook.com या आईपी पता पास करता हूं, यह अभी भी लटकता है, लेकिन यहां मैं जो देखता हूं: पिंग graph.facebook.com पिंग api.facebook.com (69.171.234.22) डेटा के 56 (84) बाइट्स। api-read-slb-10-08-prn1.facebook.com (69.171.234.22) से 64 बाइट्स: icmp_req = 1 ttl = 242 समय = 30.2 एमएस –

+0

इसके अलावा, मैं आपसे सहमत हूं कि नेटवर्क हार्डवेयर शायद समस्या है, इसे 1500 से नीचे एक एमटीयू के साथ करना पड़ सकता है। लेकिन, अगर ऐसा है, तो यह openssl में एक दोष है क्योंकि (आईएमएचओ) सुरक्षा स्ट्रीम स्तर पर होनी चाहिए, न कि लिंक स्तर पर, क्योंकि पैकेट को कैसे रूट किया जाता है, यह जानने का कोई तरीका नहीं है जंगल में। तो मुझे 5 मिनट के बाद बाहर समय दिया गया तो मुझे एक और टिप्पणी जोड़नी पड़ी। –

3

1500 से 14 9 6 तक मेरे उबंटू बॉक्स पर एमटीयू सेट करना (हमारे में से एक के कारण) फायरवॉल बहुत कम पर सेट किया जा रहा) मेरे रिबूट करने (ifconfig पहले कॉल करने के लिए सुनिश्चित हो और लिख अपने मूल MTU जो 1500 होना चाहिए) बिना सर्वर से प्रतिक्रिया प्राप्त करने के लिए अनुमति देता है:

sudo ifconfig eth0 mtu 1496 

मैं द्वारा मेरी MTU की खोज की क्रमशः बड़े बफर के साथ पिंगिंग (यूडीपी हेडर के लिए 28 बाइट्स जोड़ें):

1472 + 28 = 1500:

01 के लिए विफल
ping -s 1472 facebook.com 
PING facebook.com (66.220.158.16) 1472(1500) bytes of data. 
... 

निर्माण के लिए 1468 + 28 = 1496:

ping -s 1468 facebook.com 
PING facebook.com (69.171.229.16) 1468(1496) bytes of data. 
1476 bytes from www-slb-ecmp-06-prn1.facebook.com (69.171.229.16): icmp_req=1 ttl=242 time=30.0 ms 
... 
1496 के साथ

मैं अब facebook.com को कर्ल कर सकती हूं:

curl -v https://facebook.com 
* About to connect() to facebook.com port 443 (#0) 
* Trying 66.220.152.16... connected 
* successfully set certificate verify locations: 
* CAfile: none 
    CApath: /etc/ssl/certs 
* SSLv3, TLS handshake, Client hello (1): 
* SSLv3, TLS handshake, Server hello (2): 
* SSLv3, TLS handshake, CERT (11): 
* SSLv3, TLS handshake, Server finished (14): 
* SSLv3, TLS handshake, Client key exchange (16): 
* SSLv3, TLS change cipher, Client hello (1): 
* SSLv3, TLS handshake, Finished (20): 
* SSLv3, TLS change cipher, Client hello (1): 
* SSLv3, TLS handshake, Finished (20): 
* SSL connection using RC4-SHA 
* Server certificate: 
*  subject: C=US; ST=California; L=Palo Alto; O=Facebook, Inc.; CN=www.facebook.com 
*  start date: 2012-06-21 00:00:00 GMT 
*  expire date: 2013-12-31 23:59:59 GMT 
*  subjectAltName: facebook.com matched 
*  issuer: O=VeriSign Trust Network; OU=VeriSign, Inc.; OU=VeriSign International Server CA - Class 3; OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign 
*  SSL certificate verify ok. 
> GET/HTTP/1.1 
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
> Host: facebook.com 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
< Location: https://www.facebook.com/ 
< Content-Type: text/html; charset=utf-8 
< X-FB-Debug: 3vAg1O5OG9hB/EWC+gk1Kl3WLJRGmlQDaEodirWb+i0= 
< Date: Wed, 28 Nov 2012 19:52:25 GMT 
< Connection: keep-alive 
< Content-Length: 0 
< 
* Connection #0 to host facebook.com left intact 
* Closing connection #0 
* SSLv3, TLS alert, Client hello (1): 

मैं व्यक्तिगत रूप से लगता है कि MTU बिल्कुल नहीं होनी चाहिए टीसीपी के साथ स्ट्रीम स्तर पर उपयोगकर्ता क्या देखता है उससे कोई लेना देना नहीं है, इसलिए मुझे उम्मीद है कि ओपनएसएसएल लोग इसे ठीक करेंगे। मैं यह भी चाहता हूं कि कोई भी बग्स के लिए एक ऑटोमैजिक बग सबमिटकर्ता का आविष्कार करेगा जो गहराई से व्यापक और समय-चूसने वाला है।

+0

इसने उबंटू 14.04.3 एलटीएस पर vmware प्लेयर 12.0.0 बिल्ड -2985596 (openssl पैकेज संस्करण 1.0.1f-1ubuntu2.15) में चल रहे मुद्दे को हल किया। मेरे मामले में एमटीयू 1488 तक गिर गया। – Ultraspider

+0

एक डेबियन सर्वर पर एक विशेष होस्ट से कनेक्ट नहीं होने पर समान समस्या थी, एमटीयू को 1450 पर सेट करें और समस्या हल हो गई थी – KauriNZ

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