it-swarm.com.de

Tls Handshake fehlgeschlagen. Enthält keine IP-SANs

Ich versuche, die Logstash-Weiterleitung einzurichten, habe jedoch Probleme beim Erstellen eines geeigneten sicheren Kanals. Der Versuch, dies mit zwei Ubuntu-Computern (Server 14.04) zu konfigurieren, die in virtualbox ausgeführt werden. Sie sind 100% sauber (nicht berührte Hosts-Datei oder andere Pakete als Java, ngix, elastisearch usw. für logstash installiert)

Ich glaube nicht, dass dies ein Logstash-Problem ist, aber ein unsachgemäßer Umgang mit Zertifikaten oder etwas, das weder auf dem Logstash-Ubuntu noch auf dem Weiterleitungscomputer richtig eingestellt ist.

Ich habe die Schlüssel generiert:

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

Meine Eingabe conf auf dem Logstash-Server:

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

Die Schlüssel wurden nach Forwarder Host kopiert, das die folgende Konfiguration hat.

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

Wenn der Logstash-Server ausgeführt wird, 'Sudo-Dienst logstash-forwarder start' auf dem Weiterleitungscomputer, was mir den folgenden wiederholten Fehler gibt:

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

Wie ich bereits erwähnt habe, glaube ich nicht, dass dies ein Logstash-Problem ist, sondern ein Problem mit der Zertifikat-/Maschinenkonfiguration. Das Problem ist, ich kann es scheinbar nicht lösen. Hoffentlich können mir einige kluge Köpfe hier helfen?

Vielen Dank

31
connery

... tls Handshake mit 192.168.2.107 x509 fehlgeschlagen: Zertifikat für 192.168.2.107 kann nicht validiert werden, da es keine IP-SANs enthält

SSL benötigt die Identifizierung des Peers, andernfalls könnte Ihre Verbindung gegen einen Mann in der Mitte gerichtet sein, der die Daten entschlüsselt + schnüffelt/modifiziert und sie dann verschlüsselt an das eigentliche Ziel weiterleitet. Die Identifizierung erfolgt mit x509-Zertifikaten, die gegen eine vertrauenswürdige Zertifizierungsstelle validiert werden müssen und die das Ziel identifizieren müssen, zu dem Sie eine Verbindung herstellen möchten.

Normalerweise wird das Ziel als Hostname angegeben und dies wird mit dem Betreff und den alternativen Betreffnamen des Zertifikats verglichen. In diesem Fall ist Ihr Ziel eine IP. Um das Zertifikat erfolgreich zu validieren, muss die IP im Zertifikat im Abschnitt "Alternative Namen des Betreffs" angegeben werden, jedoch nicht als DNS-Eintrag (z. B. Hostname), sondern als IP.

Was Sie also brauchen, ist:

  1. Bearbeiten Sie Ihren /etc/ssl/openssl.cnfauf dem Logstash-Host - fügen Sie subjectAltName = IP:192.168.2.107 Im Abschnitt [v3_ca] Hinzu.

  2. Erstellen Sie das Zertifikat neu

  3. Kopieren Sie das Zertifikat und den Schlüssel auf beide Hosts

PS Erwägen Sie, der Befehlszeile zur Zertifikatserstellung -days 365 Oder mehr hinzuzufügen, da die Standardgültigkeit des Zertifikats nur 30 Tage beträgt und Sie es wahrscheinlich nicht jeden Monat neu erstellen möchten.

41
Steffen Ullrich

Es gibt ein Skript zum Erstellen geeigneter Zertifikate für Holzfäller, das auf einem Logstash-Github-Ticket erwähnt wurde: SSL-Handshake schlägt fehl, weil IP-SANs fehlen

Laden Sie die Datei herunter:

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

...baue es:

go build lc-tlscert.go

..und Renn:

./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",
11
michaelbn

Ich hatte ein echtes Problem damit. Ich verwende kein Logstash. Ich habe lediglich versucht, IP-SANs dazu zu bringen, mit Docker-TLs zu arbeiten. Ich würde das Zertifikat wie im Docker-Artikel unter https ( https://docs.docker.com/articles/https/ ) beschrieben erstellen und dann von einem Docker-Client aus eine Verbindung herstellen:

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

Ich würde diesen Fehler bekommen:

...
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 

das hat mich verrückt gemacht. Ich gebe zu, ich stolpere in allen Dingen herum, also weiß vielleicht jeder schon, was ich entdeckt habe. Das Beispiel subjectAltName hier (und an jedem anderen Ort) zeigt die Aktualisierung der Datei openssl.cnf. Ich konnte das nicht zum Laufen bringen. Ich habe eine Suche in der Datei openssl.cnf durchgeführt, sie in ein lokales Verzeichnis kopiert und dann die Änderungen daran vorgenommen. Als ich das Zertifikat untersuchte, enthielt es nicht die Erweiterung:

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

Der Befehl zum Erstellen dieses Zertifikats befindet sich hier (aus dem Docker-Artikel):

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

Sie können diesem Befehl keine Zeile -config openssl.cnf hinzufügen, sie ist ungültig. Sie können die Datei openssl.cnf auch nicht in das aktuelle Verzeichnis kopieren, ändern und hoffen, dass sie auf diese Weise funktioniert. Ein paar Zeilen später bemerkte ich, dass das 'client'-Zertifikat eine -extfile extfile.cnf verwendet. Also habe ich das versucht:

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

und das hat es behoben. Aus irgendeinem Grund erlaubte mir meine Version von openssl nicht, die Datei openssl.cnf zu ändern, aber ich konnte den subjectAltName wie folgt angeben. Funktioniert super!

Sie können eine beliebige Anzahl von IP-Adressen angeben, z. B. IP: 127.0.0.1, IP: 127.0.1.1 (auch nicht localhost).

7
Greg

Die schnelle Lösung finden Sie oben in der Lösung von @Steffen Ullrich.

Es gibt auch ein Problem/eine Diskussion darüber im Github des Logstash-Forwarder-Projekts . Eine einfachere Lösung finden Sie in Kürze (in Kürze, da derzeit daran gearbeitet wird).

0
Greg Dubicki