Помилка рукостискання tls. Не містить жодних ІР-SAN


28

Я намагаюся налаштувати експедитора logstash, але у мене є проблеми зі створенням належного захищеного каналу. Намагаючись налаштувати це з двома машинами ubuntu (сервер 14.04), що працюють у virtualbox. Вони на 100% чисті (не торкаються файлів хостів або встановлені будь-які інші пакети, окрім необхідних java, ngix, elastisearch тощо) для logstash

Я не вірю, що це проблема логсташу, але неправильне поводження з сертифікатами чи щось невірно встановлено ні на ubuntu logstash, ні на експедиторській машині.

Я згенерував ключі:

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" }
    }
   ]
}

Запускаючи сервер logstash, я "судо-сервіс logstash-forwarder start" на машині експедитора, що дає мені таку повторну помилку:

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

Як я вже згадував раніше, я не вірю, що це проблема logstash, але проблема конфігурації сертифіката / машини. Проблема в тому, що я, здається, не можу її вирішити. Сподіваюся, деякі розумні розуми тут можуть допомогти мені?

Спасибі

Відповіді:


40

... Не вдалося здійснити рукостискання tls за допомогою 192.168.2.107 x509: не вдається перевірити сертифікат для 192.168.2.107, оскільки він не містить жодних IP-SAN

SSL потребує ідентифікації однорангового, інакше ваше з'єднання може бути проти людини, що розшифровує + нюхає / модифікує дані, а потім пересилає їх знову зашифрованими до реальної цілі. Ідентифікація проводиться за допомогою сертифікатів x509, які потрібно перевірити на основі довіреного ЦА та які повинні ідентифікувати ціль, до якої потрібно підключитися.

Зазвичай ціль задається у вигляді імені хоста, і це перевіряється відповідно до теми та альтернативних імен сертифіката тематики. У цьому випадку ваша мета - IP. Успішно підтверджуючи сертифікат, IP повинна бути надана в сертифікаті в розділі альтернативних імен предмета, але не як запис DNS (наприклад, ім'я хоста), а замість IP.

Отже, що вам потрібно:

  1. Відредагуйте свій /etc/ssl/openssl.cnf на хості logstash - додайте subjectAltName = IP:192.168.2.107в [v3_ca] розділ.

  2. Відтворити сертифікат

  3. Скопіюйте сертифікат і ключ до обох хостів

PS Розгляньте, як додати -days 365або більше до командного рядка створення сертифіката, оскільки термін дії сертифікату за замовчуванням становить лише 30 днів, і ви, ймовірно, не хочете його відтворювати кожен місяць.


Дякуємо за швидку відповідь. Я створив новий сертифікат на сервері. Швидкий огляд дає мені таке: Емітент: C = AU, ST = Some-State, O = Інтернет Widgits Pty Ltd, CN = 192.168.2.107 Де 2.107 - сервер реєстрації даних ip. Потім я копіюю crt і клавішу на іншу машину (експедитора) і застосовую її до конфігурації. Це правильно для вас звучить? Тому що він все ще тьмяться про те саме ...: P
з'єднання

Будь ласка, ігноруйте мій коментар вище. Зараз я відредагував /etc/ssl/openssl.cnf і додав subjectAltName = IP: 192.168.2.107 Створив новий серт із: 'sudo openssl req -x509 -nodes -newkey rsa: 2048 -keyout private / logstash-forwarder.key - out certs / logstash-forwarder.crt 'Скопіювали їх у та застосували конфігурацію та перезапуск (в обох полях). На жаль, все одно це питання. У вас важко гугнути подібні випадки з цього приводу, так що, сподіваємось, ви зможете направити мене на правильний шлях? :)
з'єднання

1
Дійсно та сама проблема чи інше повідомлення про помилку (наприклад, невідомий КА чи подібне)? Будь ласка, опублікуйте істотну частину сертифіката, наприклад, openssl x509 -textіз сертифіката, встановленого на сервері. Також перевірте openssl s_client, чи сервер повертає очікуваний сертифікат, і використовуйте -CApaths_client, щоб перевірити, чи може ланцюжок довіри перевірити налаштований CA.
Steffen Ullrich

Мені вдалося змусити його працювати. Я поставив subjectAltName у неправильному розділі. Метод роботи: В основному я редагував openssl.cnf, в розділі [v3_ca] я додав 'subjectAltName = IP: 192.168.2.107'. Вироблено новий сертифікат та додано до сервера + клієнт. Спасибі за вашу допомогу! :)
з'єднання

9

Існує сценарій створення належних certs для дроворуба, який згадувався на квитку github logstash: рукостискання SSL не вдається через відсутність IP 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

У мене виникло справжнє питання з цим. Я не використовую logstash, я просто намагався змусити IP SAN працювати з docker tls. Я б створив сертифікат, як описано в статті докера на https ( https://docs.docker.com/articles/https/ ), тоді, коли я підключуся би від клієнта докера:

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 

що зводило мене з розуму. Зізнаюся, я спіткнувся у всьому, що відкрито, так що всі вже можуть знати, що я відкрив. Приклад subjeAltName тут (і будь-коли інше) показує оновлення файлу openssl.cnf. Я не міг змусити це працювати. Я зробив пошук у openssl.cnf, скопіював його у локальний каталог, а потім внесли зміни до нього. Коли я оглянув cert, він не містив розширення:

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

Команда, яка використовується для створення цього cert, знаходиться тут (із статті docker):

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

Ви не можете додати до цієї команди рядок -config openssl.cnf, вона не вірна. Також ви не можете скопіювати файл openssl.cnf у поточний каталог, змінити його та сподіватися змусити його працювати таким чином. Через кілька рядків я помітив, що "клієнтський" серт використовує -extfile extfile.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

і це зафіксувало. Отже, з будь-якої причини моя версія openssl не дозволяла мені змінювати файл openssl.cnf, але я могла вказати на тему subjectAltName. Чудово працює!

Ви можете вказати будь-яку кількість IP-адрес, таких як IP: 127.0.0.1, IP: 127.0.1.1 (також не localhost).


А-ха! Дякую, я роблю те саме, що і ви з докером, і торкнувся цього питання. Я зараз спробую ваші пропозиції.
Марк Джонс

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.