"SSL3_READ_BYTES: sslv3 अलर्ट खराब प्रमाणपत्र" अलर्ट दर्शाता है कि एसएसएल विफल हुआ


17

नीचे कमांड चलाते समय ssclcl -host उदाहरण .xyz -port 9093 खुलता है

मुझे निम्नलिखित त्रुटि मिलती है:

139810559764296:error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate:s3_pkt.c:1259:SSL alert number 42
39810559764296:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184:

लेकिन अंत में मुझे "Verify return code: 0 (ok)"संदेश मिलता है ।

मेरा प्रश्न यह है कि उपरोक्त चेतावनी क्या संकेत देती है, और यदि एसएसएल वास्तव में सफल था। अग्रिम में मदद के लिए बहुत बहुत धन्यवाद।

SSL handshake has read 6648 bytes and written 354 bytes
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol  : TLSv1.2
Cipher    : AES128-SHA
Session-ID: xx
Session-ID-ctx:
Master-Key: xx
Key-Arg   : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1475096098
Timeout   : 300 (sec)
**Verify return code: 0 (ok)**

जवाबों:


25

"हैंडशेक विफलता" का अर्थ है हैंडशेक विफल होना, और एसएसएल / टीएलएस कनेक्शन नहीं है। आपको यह देखना चाहिए कि opensslशेल (या सीएमडी आदि) से बाहर निकलता है और सर्वर पर इनपुट डेटा भेजे जाने का इंतजार नहीं करता है। "वेरिफ़ रिटर्न कोड 0" का अर्थ है कि सर्वर के प्रमाण पत्र में कोई समस्या नहीं पाई गई थी , या तो क्योंकि यह बिल्कुल भी चेक नहीं किया गया था या क्योंकि यह चेक किया गया था और अच्छा था (जहां तक ​​कि ओपनएसएसएल के चेक चलते हैं, जो सब कुछ कवर नहीं करता है); इस मामले में प्रोटोकॉल को जानकर हम बाद में लागू होने वाले मामले को घटा सकते हैं।

अलर्ट प्राप्त करनाbad certificate (कोड 42) का मतलब है कि सर्वर आपसे एक प्रमाण पत्र के साथ प्रमाणित करने की मांग करता है , और आपने ऐसा नहीं किया, और इससे हैंडसम विफलता हुई। लाइन से पहले कुछ पंक्तियाँ SSL handshake has read ... and written ...आपको Acceptable client certificate CA namesआमतौर पर CA की पहचान करने वाली कई लाइनों के बाद एक लाइन दिखनी चाहिए, संभवतः एक लाइन शुरुआत के बाद Client Certificate Typesऔर शायद Requested Signature Algorithmsआपके ओपनएसएसएल संस्करण और बातचीत किए गए प्रोटोकॉल के आधार पर कुछ ।

'स्वीकार्य' सूची में CA द्वारा जारी किया गया एक प्रमाण पत्र प्राप्त करें , या यदि यह दस्तावेज पर या सर्वर के बारे में यह कहकर खाली कर दिया गया था कि कौन सा सीए इस पर भरोसा करता है या सर्वर ऑपरेटरों या मालिकों से संपर्क करें और उनसे पूछें, साथ ही साथ मिलान करने वाली निजी कुंजी , दोनों PEM प्रारूप में, और उन्हें निर्दिष्ट के साथ -cert $file -key $file; यदि आपके पास दोनों एक ही फ़ाइल में हैं, तो PEM के साथ संभव है, बस उपयोग करें-cert $file। यदि आपके पास उन्हें एक अलग प्रारूप में है, तो या तो इसे निर्दिष्ट करें, या यहां खोजें और शायद सुपरयूज़र और सुरक्षा। एक्स; विभिन्न प्रमाणपत्रों और निजीकरण प्रारूपों को परिवर्तित करने के बारे में पहले से ही कई प्रश्नोत्तर हैं। यदि आपके प्रमाणपत्र को सत्यापित करने के लिए "चेन" या "इंटरमीडिएट" सर्टिफिकेट (या एक से अधिक भी) की आवश्यकता है, जैसा कि अक्सर सर्वर को कैसे कॉन्फ़िगर किया जाता है, इसके आधार पर एक सार्वजनिक सीए (एक इनडोर एक बनाम) से एक प्रमाण पत्र के लिए मामला है, s_clientएक ट्रिक की आवश्यकता होती है: या तो अपने सिस्टम ट्रस्टस्टोर में चेन सर्टिफिकेट (एस) जोड़ें, या सीए सर्टिफिकेट वाले एक स्थानीय / अस्थायी ट्रस्टस्टोर को बनाएं, आपको सर्वर को सत्यापित करने की आवश्यकता है चेन चेन (एस) जिसे आपको भेजने की आवश्यकता है।

यदि आपके पास ऐसा कोई प्रमाण पत्र नहीं है, तो आपको या तो एक प्राप्त करने की आवश्यकता है, जो कि एक अलग प्रश्न है जिसका उत्तर देने के लिए बहुत अधिक विवरण की आवश्यकता है, या आपको प्रमाण पत्र प्रमाणीकरण का उपयोग किए बिना सर्वर से कनेक्ट करने का तरीका खोजने की आवश्यकता है; फिर से दस्तावेज़ देखें और / या ऑपरेटरों / मालिकों से पूछें।

संपादित करें: यह टिप्पणी से प्रतीत होता है कि आपके पास क्लाइंट कुंजी और प्रमाणित श्रृंखला के साथ-साथ जावा में सर्वर एंकर (एस) भी हो सकता है। जाँच करने पर मुझे उस मामले को पूरी तरह से कवर करने वाला एक अच्छा मौजूदा जवाब नहीं दिखता है, इसलिए भले ही यह शायद अच्छी तरह से खोज नहीं करेगा:

# Assume Java keystore is type JKS (the default but not only possibility)
# named key.jks and the privatekey entry is named mykey (ditto)
# and the verify certs are in trust.jks in entries named trust1 trust2 etc.

# convert Java key entry to PKCS12 then PKCS12 to PEM files
keytool -importkeystore -srckeystore key.jks -destkeystore key.p12 -deststoretype pkcs12 -srcalias mykey 
openssl pkcs12 -in key.p12 -nocerts -out key.pem
openssl pkcs12 -in key.p12 -nokeys -clcerts -out cert.pem
openssl pkcs12 -in key.p12 -nokeys -cacerts -out chain.pem
# extract verify certs to individual PEM files
# (or if you 'uploaded' PEM files and still have them just use those)
keytool -keystore trust.jks -export -alias trust1 -rfc -file trust1.pem
keytool -keystore trust.jks -export -alias trust2 -rfc -file trust2.pem
... more if needed ...
# combine for s_client 
cat chain.pem trust*.pem >combined.pem
openssl s_client -connect host:port -key key.pem -cert cert.pem -CAfile combined.pem

हाय दवे; नीचे वह प्रक्रिया है जिसका हमने अनुसरण किया है। 1: रूट CA, और मध्यवर्ती प्रमाणपत्र कीस्टस्टोर में अपलोड करें। 2: हस्ताक्षर किए गए कोमोडो प्रमाणपत्र को कीस्टोर में अपलोड करें। 3: ट्रस्ट CA में रूट CA और मध्यवर्ती प्रमाणपत्र अपलोड करें। 4: क्लस्टर (कैसेंड्रा) में प्रत्येक नोड में कीस्टोर और ट्रस्टोर फ़ाइलों की प्रतिलिपि बनाएँ। नोड संचार के लिए एसएसएल का उपयोग करते हैं, और वे बिना मुद्दों के डेटा का आदान-प्रदान करते हैं। हालाँकि जब मैं उपर्युक्त SSL कमांड चलाता हूं, तो समस्या बढ़ जाती है।
kris433

@ kris433: कीस्टोर क्या है? आपके द्वारा बताई गई प्रक्रिया जावा के लिए ध्वनियों का वर्णन करती है यदि (और केवल अगर) तो यह पहले से ही एक प्राइवेट उत्पन्न कर चुका है, जिसके लिए आप 'हस्ताक्षरित कोमोडो सर्टिफिकेट' प्राप्त करते हैं, हालाँकि यदि आप एक मानक जावा का उपयोग कर रहे हैं तो यह एक डिफ़ॉल्ट है। ट्रस्टस्टोर जिसमें कोमोडो शामिल है, इसलिए आपको इसे बदलने की आवश्यकता नहीं है। OpenSSL किसी भी जावा कीस्टोर या ट्रस्टस्टोर का उपयोग नहीं करता है और डिफ़ॉल्ट रूप से यह किसी भी कीस्टोर का उपयोग नहीं करता है, यही कारण है कि आपको -cert [-key] के साथ फाइल निर्दिष्ट करने की आवश्यकता होती है। यदि मैंने आपकी टिप्पणी की सही व्याख्या की है, तो संपादन देखें।
dave_thompson_085

बहुत बहुत धन्यवाद डेव। यह पूरी तरह से काम किया। आपने मेरा हफ्ता बचा लिया। यदि आप कभी फिलाडेल्फिया आते हैं, तो पनीर-स्टेक और गिलाटो मुझ पर हैं;)। फिर से धन्यवाद।
kris433

@ kris433: आपका स्वागत है, लेकिन स्टैकएक्सचेंज ऑफिशियल तरीका चेकमार्क का उपयोग करके एक उपयोगी उत्तर स्वीकार करना है, इसलिए सिस्टम स्वचालित रूप से अन्य querents को परिणाम प्रदर्शित करने में इस जानकारी का उपयोग कर सकता है ; जब आप इस साइट पर आए थे, या अधिक विशेष रूप से serverfault.com/help/someone-answers को देखने वाले 'टूर' को देखने वाले थे ।
dave_thompson_085

0

मेरे मामले में मुझे यह त्रुटि मिली जब निजी कुंजी प्रमाणपत्र से मेल नहीं खाती थी। जब मेरा एक्सपायर हो गया था और मुझे एक नई निजी कुंजी बनाने की आवश्यकता थी, तो मैंने प्रमाणित अपडेट किया था। हालाँकि, मैं अपने ऐप में इसका संदर्भ देना भूल गया। जब मैंने नई निजी कुंजी को इंगित किया - यह त्रुटि चली गई।

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