असफल टेल्स हैंडशेक। किसी भी आईपी SANs शामिल नहीं है


28

मैं लॉगस्टैश फारवर्डर स्थापित करने की कोशिश कर रहा हूं, लेकिन मेरे पास एक उचित सुरक्षित चैनल बनाने के मुद्दे हैं। वर्चुअलबॉक्स में चलने वाली दो ubuntu (सर्वर 14.04) मशीनों के साथ इसे कॉन्फ़िगर करने की कोशिश की जा रही है। वे 100% स्वच्छ हैं (मेजबान फ़ाइल को छुआ नहीं गया है या लॉगवाश के लिए आवश्यक जावा, एनिक्स, इलास्टिसर्च आदि, के अलावा अन्य कोई भी पैकेज स्थापित नहीं किया गया है)

मेरा मानना ​​है कि यह एक लॉगस्टैश मुद्दा है, लेकिन प्रमाणपत्रों की अनुचित हैंडलिंग या लॉगस्टैश जुबांट या फारवर्डर मशीन पर कुछ भी सही नहीं है।

मैंने चाबियाँ तैयार कीं:

sudo openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

लॉगस्टैश सर्वर पर मेरा इनपुट कॉन्फिडेंस:

input {
  lumberjack {
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

कुंजी को फ़ॉर्वर्ड होस्ट में कॉपी किया गया था , जिसमें निम्न कॉन्फ़िगरेशन है।

{
  "network": {
    "servers": [ "192.168.2.107:5000" ],
    "timeout": 15,
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
    "ssl key": "/etc/pki/tls/certs/logstash-forwarder.key"
  },
  "files": [
    {
      "paths": [
        "/var/log/syslog",
        "/var/log/auth.log"
       ],
      "fields": { "type": "syslog" }
    }
   ]
}

लॉगस्टैश सर्वर के चलने के साथ, मैं फारवर्डर मशीन पर 'sudo सर्विस लॉगस्टैश-फारवर्डर स्टार्ट' करता हूं, जिससे मुझे निम्नलिखित बार-बार पता चलता है:

Jul  9 05:06:21 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:21.589762 Connecting to [192.168.2.107]:5000 (192.168.2.107)
Jul  9 05:06:21 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:21.595105 Failed to tls handshake with 192.168.2.107 x509: cannot validate certificate for 192.168.2.107 because it doesn't contain any IP SANs
Jul  9 05:06:22 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:22.595971 Connecting to [192.168.2.107]:5000 (192.168.2.107)
Jul  9 05:06:22 ubuntu logstash-forwarder[1374]: 2014/07/09 05:06:22.602024 Failed to tls handshake with 192.168.2.107 x509: cannot validate certificate for 192.168.2.107 because it doesn't contain any IP SANs

जैसा कि मैंने पहले उल्लेख किया है, मुझे विश्वास नहीं है कि यह एक लॉगस्टैश समस्या है, लेकिन प्रमाणपत्र / मशीन कॉन्फ़िगरेशन समस्या है। समस्या यह है, मैं इसे हल करने के लिए प्रतीत नहीं कर सकता। उम्मीद है कि यहाँ कुछ चतुर दिमाग मेरी मदद कर सकते हैं?

धन्यवाद

जवाबों:


40

... 192.168.2.107 x509 के साथ हाथ मिलाने में विफल: 192.168.2.107 के लिए प्रमाण पत्र को मान्य नहीं किया जा सकता है क्योंकि इसमें कोई IP SAN नहीं है

एसएसएल को सहकर्मी की पहचान की आवश्यकता होती है, अन्यथा आपका कनेक्शन एक ऐसे व्यक्ति के बीच में हो सकता है जो डेटा को + सूँघता / संशोधित करता है और फिर उन्हें फिर से वास्तविक लक्ष्य पर एन्क्रिप्ट करता है। पहचान x509 प्रमाणपत्रों के साथ की जाती है, जिन्हें एक विश्वसनीय सीए के खिलाफ मान्य होने की आवश्यकता होती है और जिस लक्ष्य को आप कनेक्ट करना चाहते हैं, उसे पहचानने की आवश्यकता होती है।

आमतौर पर लक्ष्य को एक होस्टनाम के रूप में दिया जाता है और इसे प्रमाण पत्र के विषय और विषय वैकल्पिक नामों के खिलाफ जांचा जाता है। इस मामले में आपका लक्ष्य एक आईपी है। प्रमाणपत्र को सफलतापूर्वक प्रमाणित करें आईपी को विषय वैकल्पिक नाम अनुभाग के अंदर n प्रमाण पत्र दिया जाना चाहिए, लेकिन DNS प्रविष्टि (जैसे होस्टनाम) के रूप में नहीं बल्कि आईपी के रूप में।

तो आपको क्या चाहिए:

  1. /etc/ssl/openssl.cnf लॉगस्टैश होस्ट पर अपना संपादन करें - अनुभाग subjectAltName = IP:192.168.2.107में जोड़ें [v3_ca]

  2. प्रमाणपत्र को फिर से बनाएँ

  3. दोनों मेजबानों को प्रमाणपत्र और कुंजी की प्रतिलिपि बनाएँ

PS -days 365सर्टिफिकेट क्रिएशन कमांडलाइन में जोड़ने या उससे अधिक पर विचार करें क्योंकि डिफॉल्ट सर्टिफिकेट की वैधता सिर्फ 30 दिन है और आप शायद इसे हर महीने दोबारा बनाना नहीं चाहते हैं।


जल्दी जवाब देने का शुक्रिया। मैंने सर्वर पर एक नया प्रमाणपत्र तैयार किया। एक त्वरित निरीक्षण मुझे निम्नलिखित देता है: जारीकर्ता: सी = एयू, एसटी = कुछ-राज्य, ओ = इंटरनेट विडगिट्स पीटीआई लिमिटेड, सीएन = 192.168.2.107 जहां 2.107 लॉगस्टैश सर्वर आईपी है। मैं तब crt और कुंजी को दूसरी मशीन (फारवर्डर) पर कॉपी करता हूं और इसे कॉन्फ़िगरेशन पर लागू करता हूं। क्या यह ध्वनि आपके लिए सही है? क्योंकि यह अभी भी एक ही बात के बारे में रोना है ...: पी
कंसर्ट

कृपया मेरी टिप्पणी को अनदेखा करें। मैंने अब /etc/ssl/openssl.cnf को एडिट किया है और सब्जेक्ट जोड़ा गया है नाम = IP: 192.168.2.107 इसके साथ एक नया सर्टिफिकेट बनाया गया: 'sudo opensl req -x509 -nodes_newkey rsa: 2048 -keyout private / logstash-Forwarder.key - आउट सीर्ट्स / लॉगस्टैश-फॉरवर्डर.टार 'ने उन्हें कॉपी किया और कॉन्फ़िगर और रिस्टार्ट (दोनों बॉक्स पर) लागू किया। दुर्भाग्य से अभी भी वही मुद्दा है। इस पर समान मामलों को देखने के लिए कठिन समय बीत रहा है, इसलिए उम्मीद है कि आप मुझे सही रास्ते पर ले जाने में सक्षम हैं? :)
जूलरी

1
वास्तव में एक ही मुद्दा या एक और त्रुटि संदेश (जैसे अज्ञात सीए या समान)? कृपया सर्टिफिकेट के आवश्यक भाग openssl x509 -textको सर्वर पर स्थापित प्रमाणपत्र से पोस्ट करें। कृपया यह भी देखें openssl s_clientकि सर्वर अपेक्षित प्रमाण पत्र लौटाता है और -CApaths_client के साथ उपयोग करके यह जाँचता है कि ट्रस्ट चेन को कॉन्फ़िगर किए गए CA के खिलाफ सत्यापित किया जा सकता है।
स्टीफेन उलरिच

मैं इसे काम करने में कामयाब रहा। मैं गलत अनुभाग में विषय डाल दिया। काम करने का तरीका: मूल रूप से मैंने ओपनश्ल.कॉन्फ़ को संपादित किया है, अनुभाग में [v3_ca] मैंने 'सब्जेक्टअनेम = आईपी: 192.168.2.107' जोड़ा है। नया प्रमाणपत्र बनाया और सर्वर + क्लाइंट में जोड़ा गया। आपकी सहायताके लिए धन्यवाद! :)
जूलरी

9

लंबरजैक के लिए उचित सीट्स बनाने के लिए एक स्क्रिप्ट है जिसका उल्लेख एक लॉगस्टैश गिटब टिकट पर किया गया था: एसएसएल हैंडशेक विफल रहता है क्योंकि आईपी SAN गायब हैं

फ़ाइल डाउनलोड करें:

curl -O https://raw.githubusercontent.com/driskell/log-courier/1.x/src/lc-tlscert/lc-tlscert.go

...इसे बनाओ:

go build lc-tlscert.go

..और भाग खड़ा हुआ:

./lc-tlscert 
Specify the Common Name for the certificate. The common name
can be anything, but is usually set to the server's primary
DNS name. Even if you plan to connect via IP address you
should specify the DNS name here.

Common name: you_domain_or_whatever

The next step is to add any additional DNS names and IP
addresses that clients may use to connect to the server. If
you plan to connect to the server via IP address and not DNS
then you must specify those IP addresses here.
When you are finished, just press enter.

DNS or IP address 1: 172.17.42.1 (th ip address to trust)
DNS or IP address 2: 

How long should the certificate be valid for? A year (365
days) is usual but requires the certificate to be regenerated
within a year or the certificate will cease working.

Number of days: 3650
Common name: what_ever
DNS SANs:
    None
IP SANs:
    172.17.42.1

The certificate can now be generated
Press any key to begin generating the self-signed certificate.

Successfully generated certificate
    Certificate: selfsigned.crt
    Private Key: selfsigned.key

Copy and paste the following into your Log Courier
configuration, adjusting paths as necessary:
    "transport": "tls",
    "ssl ca":    "path/to/selfsigned.crt",

Copy and paste the following into your LogStash configuration, 
adjusting paths as necessary:
    ssl_certificate => "path/to/selfsigned.crt",
    ssl_key         => "path/to/selfsigned.key",

1
इसने आज मुझे बहुत समय बचाया ... गितलब-धावक के लिए। धन्यवाद!
मैट मेसमिथिथ

6

मेरे पास इसके साथ एक वास्तविक मुद्दा था। मैं लॉगस्टैश का उपयोग नहीं कर रहा हूं, मैं बस कोशिश कर रहा था कि IP SAN को docker tls के साथ काम करने का मौका मिले। मैं https ( https://docs.docker.com/articles/https/ ) पर docker लेख में वर्णित प्रमाण पत्र बनाऊंगा , तब जब मैं docker ग्राहक से जुड़ूंगा:

docker --tlsverify  -H tcp://127.0.0.1:2376 version

मुझे यह त्रुटि मिलेगी:

...
FATA[0000] An error occurred trying to connect: Get https://127.0.0.1:2376/v1.16/version: \
x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs 

जो मुझे पागल कर रहा था। मैं मानता हूं, मैं सभी चीजों के बारे में सोचता हूं। यहाँ सब्जेक्टअनाम का उदाहरण (और हर जगह जहाँ) खुलता है .sl.cnf फ़ाइल को अपडेट करता है। मुझे वह काम नहीं मिला। मैंने Opensl.cnf पर एक खोज किया, इसे एक स्थानीय निर्देशिका में कॉपी किया, फिर इसमें परिवर्तन किए। जब मैंने प्रमाणपत्र की जांच की तो उसमें विस्तार नहीं था:

openssl x509 -noout -text -in server-cert.pem

उस सर्टिफिकेट को बनाने के लिए जिस कमांड का उपयोग किया जा रहा है, वह यहां है (docker लेख से):

openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem \
    -CAcreateserial -out server-cert.pem

आप इस कमांड में एक -config Opensl.cnf लाइन नहीं जोड़ सकते, यह मान्य नहीं है। न ही आप मौजूदा निर्देशिका में filess.c.cn फ़ाइल को कॉपी कर सकते हैं, इसे संशोधित कर सकते हैं, और इसे उस तरह से काम करने के लिए प्राप्त कर सकते हैं। कुछ पंक्तियाँ बाद में मैंने देखा कि 'क्लाइंट' सर्टिफिकेट एक कस्टम-एक्स्टाइलilefile.cnf का उपयोग करता है। तो, मैंने यह कोशिश की:

echo subjectAltName = IP:127.0.0.1 > extfile.cnf
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial \
   -out server-cert.pem -extfile extfile.cnf

और यह तय है। तो, जो भी कारण के लिए मेरा Opensl का संस्करण मुझे Opensl.cnf फ़ाइल को संशोधित करने की अनुमति नहीं दे रहा था, लेकिन, मैं इस तरह subjectAltName निर्दिष्ट कर सकता था। बहुत अच्छा काम करता है!

आप IP पते की कोई भी संख्या निर्दिष्ट कर सकते हैं, जैसे IP: 127.0.0.1, IP: 127.0.1.1 (साथ ही गैर स्थानीयहोस्ट)।


आह हा! धन्यवाद, मैं वही काम कर रहा हूं जो आप करते हैं और इस मुद्दे को हिट करते हैं। मैं अब आपके सुझावों की कोशिश करूंगा।
मार्क जोंस

0

कृपया त्वरित समाधान के लिए ऊपर @Steffen Ullrich का समाधान देखें।

लॉगस्टैश-फारवर्डर प्रोजेक्ट के गिटब में इसके बारे में एक मुद्दा / चर्चा भी है । इसे देखें (जल्द ही, क्योंकि वर्तमान में इस पर काम चल रहा है) एक आसान समाधान के लिए।

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