Başarısız tls el sıkışma. IP SAN içermez


28

Logstash iletici kurmaya çalışıyorum, ancak uygun bir güvenli kanal oluşturma konusunda sorun yaşıyorum. Sanal kutuda çalışan iki ubuntu (sunucu 14.04) makinesiyle bunu yapılandırmaya çalışıyorum. % 100 temizdirler (ana bilgisayar dosyasına dokunulmazlar ya da logstash için gerekli java, ngix, elastisearch, vb. Dışında herhangi bir paket yüklerler)

Bunun bir logtastas sorunu olduğuna inanmıyorum, ancak sertifikaların yanlış kullanımı ya da logstas ubuntu veya iletici makinede doğru şekilde ayarlanmamış bir şey.

Anahtarları ben ürettim:

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

Logstash sunucusundaki girişim conf:

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

Anahtarlar , aşağıdaki yapılandırmaya sahip olan iletici ana bilgisayara kopyalandı .

{
  "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 sunucusu çalışırken, iletici makinedeki 'logstash-forwarder start' hizmetini başlatıyorum , bana şu tekrarlanan hatayı veriyor:

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

Daha önce de belirttiğim gibi, bunun bir logstash sorunu olduğuna inanmıyorum, ancak sertifika / makine yapılandırma sorunu. Sorun şu ki, çözemiyor gibiyim. Umarım buradaki akıllı beyinler bana yardım edebilir mi?

Teşekkürler

Yanıtlar:


40

... 192.168.2.107 x509 ile karşılıklı anlaşması başarısız oldu: 192.168.2.107 sertifikası doğrulanamıyor çünkü herhangi bir IP SAN içermiyor

SSL, eşin kimliğini belirlemeye ihtiyaç duyar, aksi halde bağlantınız verilerin şifresini çözen + koklayan / değiştiren ve daha sonra tekrar gerçek hedefe şifrelenmiş ileten ortadaki bir adama karşı olabilir. Kimlik, güvenilir bir CA'ya göre doğrulanması gereken ve bağlanmak istediğiniz hedefi tanımlaması gereken x509 sertifikalarıyla yapılır.

Genellikle hedef bir ana bilgisayar adı olarak verilir ve bu, sertifikanın konu ve konu alternatif adlarına göre kontrol edilir. Bu durumda hedefiniz bir IP'dir. Sertifika belgesini başarıyla doğrulayın, konuya alternatif adlar bölümündeki sertifikada IP verilmelidir, ancak bir DNS girişi (ör. Ana bilgisayar adı) değil, IP olarak verilmelidir.

Öyleyse ihtiyacın olan şey:

  1. Düzenleyin /etc/ssl/openssl.cnf logstash ana bilgisayarda - eklenti subjectAltName = IP:192.168.2.107içinde [v3_ca] bölüm.

  2. Sertifikayı yeniden oluştur

  3. Sertifika ve anahtarı her iki ana bilgisayara kopyala

Not -days 365Varsayılan sertifika geçerliliği sadece 30 gün olduğundan ve muhtemelen her ay yeniden oluşturmak istemezsiniz.


Hızlı cevap için teşekkürler. Sunucuda yeni bir sertifika oluşturdum. Hızlı bir inceleme bana aşağıdakileri verir: İhraççı: C = AU, ST = Bazı Durum, O = İnternet Genişlikleri Pty Ltd, CN = 192.168.2.107 Burada 2.107 logstash sunucusu ip'dir. Daha sonra crt'yi kopyalayıp anahtarını diğer makineye (iletici) aktarıyorum ve konfigürasyona uyguladım. Bu ses size uygun mu? Çünkü hala aynı şey hakkında sızlanıyor ...: P
connery

Lütfen yukarıdaki yorumumu dikkate almayın. Şimdi /etc/ssl/openssl.cnf dosyasını düzenledim ve konuAltName = IP: 192.168.2.107'yi ekledim: Yeni bir cert yarattı: 'sudo openssl req -x509 -nodes -newkey rsa: 2048 -keyout özel / logstash-forwarder.key - out certs / logstash-forwarder.crt 'Bunları kopyaladı ve config ve yeniden başlatın (her iki kutuda da) uygulayın. Ne yazık ki hala aynı sorun. Bu konuda benzer davalar yapmakta zorlanıyorsanız, umarım beni doğru yola yönlendirebilir misiniz? :)
connery

1
Gerçekten aynı sorun ya da başka bir hata mesajı (bilinmeyen CA veya benzeri gibi)? Lütfen sertifikanın asıl bölümünü, örneğin openssl x509 -textsunucuda yüklü olan sertifikadan gönderin . Lütfen openssl s_clientsunucunun beklenen sertifikayı -CApathverdiğini ve güven zincirinin yapılandırılmış CA'ya göre doğrulanıp doğrulanmadığını kontrol etmek için s_client ile birlikte kullanıldığını kontrol edin.
Steffen Ullrich

İşe almayı başardım. SubjectAltName'i yanlış bölüme koydum. Çalışma yöntemi: Temelde openssl.cnf dosyasını düzenledim, [v3_ca] bölümünde 'subjectAltName = IP: 192.168.2.107' ekledim. Yeni sertifika üretildi ve sunucu + istemciye eklendi. Yardımın için teşekkürler! :)
connery

9

Bir logstash github biletinde belirtilen oduncu için uygun para oluşturmak için bir komut dosyası var: IP SAN'leri eksik olduğundan SSL anlaşması başarısız oluyor

Dosyayı indir:

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

...inşa et:

go build lc-tlscert.go

..ve koş:

./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
Bu beni bugün çok zaman kazandı ... gitlab koşucusu için de olsa. Teşekkür ederim!
Matt Messersmith

6

Bununla ilgili gerçek bir sorunum vardı. Ben logstash kullanmıyorum, sadece IP SAN'ları liman tls'i ile çalıştırmaya çalışıyordum. Sertifikayı, https ( https://docs.docker.com/articles/https/ ) adresindeki docker makalesinde açıklandığı gibi , sonra da bir dock istemcisinden ne zaman bağlanacağımı belirtirim:

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

Bu hatayı alırdım:

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

Bu beni deli ediyordu. İtiraf ediyorum, her şey açılırsa yanıldım, bu yüzden, herkes ne keşfettiğimi zaten biliyor olabilir. SubjectAltName buradaki örnek (ve her başka yerde) openssl.cnf dosyasının güncellenmesini gösterir. Bunu işe alamadım. Openssl.cnf dosyasını bulup yerel bir dizine kopyaladım ve değişiklikler yaptım. Sertifikayı incelediğimde uzatmayı içermiyordu:

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

Bu sertifikayı oluşturmak için kullanılan komut burada (liman işçisi makalesinden):

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

Bu komuta bir -config openssl.cnf satırı ekleyemezsiniz, bu geçerli değildir. Openssl.cnf dosyasını geçerli dizine kopyalayamaz, değiştiremez ve bu şekilde çalışmasını sağlayabilirsiniz. Birkaç satır sonra 'istemci' sertifikasının bir -extfile extfile.cnf kullandığını fark ettim. Yani bunu denedim:

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

ve bu onu düzeltti. Bu nedenle, herhangi bir nedenden dolayı openssl sürümüm openssl.cnf dosyasını değiştirmeme izin vermiyordu, ancak konuAltName'i bu şekilde belirtebilirdim. Harika çalışıyor!

IP: 127.0.0.1, IP: 127.0.1.1 (yerel ana bilgisayar dışında) gibi herhangi bir sayıda IP adresi belirleyebilirsiniz.


Ah-ha! Teşekkür ederim, ben liman işçisi ile aynı şeyi yapıyorum ve bu konuda çarptı. Şimdi önerilerinizi deneyeceğim.
Mark Jones,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.