Thất bại tls bắt tay. Không chứa bất kỳ IP SAN nào


28

Tôi đang cố gắng thiết lập logstash Forwarder, nhưng tôi gặp vấn đề với việc tạo một kênh bảo mật thích hợp. Đang cố gắng định cấu hình này với hai máy ubfox (máy chủ 14.04) đang chạy trong hộp ảo. Chúng sạch 100% (không chạm vào tệp máy chủ hoặc cài đặt bất kỳ gói nào khác ngoài java, ngix, elastisearch, v.v. để đăng nhập)

Tôi không tin rằng đây là sự cố logstash, nhưng việc xử lý chứng chỉ không đúng hoặc điều gì đó không được đặt chính xác trên logstash ub Ubuntu hoặc máy chuyển tiếp.

Tôi đã tạo các khóa:

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

Conf đầu vào của tôi trên máy chủ logstash:

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

Các khóa đã được sao chép vào máy chủ chuyển tiếp , có cấu hình sau.

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

Với máy chủ logstash đang chạy, tôi bắt đầu dịch vụ logstash-Forwarder ' trên máy chuyển tiếp, đưa ra lỗi lặp lại sau đây:

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

Như tôi đã đề cập trước đó, tôi không tin rằng đây là sự cố logstash, nhưng vấn đề cấu hình chứng chỉ / máy. Vấn đề là, tôi dường như không thể giải quyết nó. Hy vọng một số bộ óc thông minh ở đây có thể giúp tôi ra ngoài?

Cảm ơn

Câu trả lời:


40

... Không thể bắt tay với tls 192.168.2.107 x509: không thể xác thực chứng chỉ cho 192.168.2.107 vì nó không chứa bất kỳ IP SAN nào

SSL cần nhận dạng ngang hàng, nếu không, kết nối của bạn có thể chống lại một người trung gian giải mã + đánh hơi / sửa đổi dữ liệu và sau đó chuyển tiếp chúng được mã hóa trở lại mục tiêu thực. Việc xác định được thực hiện với các chứng chỉ x509 cần được xác thực đối với CA đáng tin cậy và cần xác định mục tiêu bạn muốn kết nối.

Thông thường mục tiêu được đưa ra dưới dạng tên máy chủ và điều này được kiểm tra đối với tên thay thế của chủ đề và chủ đề của chứng chỉ. Trong trường hợp này, mục tiêu của bạn là một IP. Xác thực thành công chứng nhận IP phải được cấp n chứng chỉ bên trong phần tên thay thế chủ đề, nhưng không phải là mục nhập DNS (ví dụ: tên máy chủ) mà thay vào đó là IP.

Vì vậy, những gì bạn cần là:

  1. Chỉnh sửa của bạn /etc/ssl/openssl.cnf trên máy chủ logstash - thêm subjectAltName = IP:192.168.2.107vào [v3_ca] phần.

  2. Tái tạo chứng chỉ

  3. Sao chép chứng chỉ và khóa cho cả hai máy chủ

PS Hãy xem xét thêm -days 365hoặc nhiều hơn vào dòng lệnh tạo chứng chỉ vì hiệu lực của chứng chỉ mặc định chỉ là 30 ngày và bạn có thể không muốn tạo lại nó mỗi tháng ..


Cảm ơn đã trả lời nhanh chóng. Tôi đã tạo một chứng chỉ mới trên máy chủ. Việc kiểm tra nhanh cung cấp cho tôi các thông tin sau: Nhà phát hành: C = AU, ST = Một số quốc gia, O = Internet Widgits Pty Ltd, CN = 192.168.2.107 Trong đó 2.107 là ip máy chủ logstash. Sau đó tôi sao chép crt và khóa sang máy khác (chuyển tiếp) và áp dụng nó vào cấu hình. Điều này nghe có đúng với bạn không? Vì nó vẫn còn than vãn về điều tương tự ...: P
Connery

Hãy bỏ qua bình luận của tôi ở trên. Bây giờ tôi đã chỉnh sửa /etc/ssl/openssl.cnf và thêm chủ đềAltName = IP: 192.168.2.107 Tạo chứng chỉ mới với: 'sudo openssl req -x509 -nodes -newkey rsa: 2048 -keyout private / logstash-Forwarder.key out certs / logstash-Forwarder.crt 'Đã sao chép chúng và áp dụng cấu hình và khởi động lại (trên cả hai hộp). Thật không may vẫn là vấn đề tương tự. Có một thời gian khó khăn để giải quyết các trường hợp tương tự về điều này, vì vậy hy vọng bạn có thể hướng dẫn tôi đi đúng đường? :)
nối

1
Thực sự cùng một vấn đề hoặc thông báo lỗi khác (như CA không xác định hoặc tương tự)? Vui lòng gửi phần thiết yếu của chứng chỉ, ví dụ openssl x509 -texttừ chứng chỉ được cài đặt trên máy chủ. Ngoài ra, vui lòng kiểm tra xem openssl s_clientmáy chủ có trả lại chứng chỉ dự kiến ​​không và sử dụng -CApathvới s_client để kiểm tra xem chuỗi tin cậy có thể được xác minh đối với CA được định cấu hình không.
Steffen Ullrich

Tôi quản lý để có được nó để làm việc. Tôi đặt objectAltName trong phần sai. Phương pháp làm việc: Về cơ bản tôi đã chỉnh sửa openssl.cnf, trong phần [v3_ca] Tôi đã thêm 'topicAltName = IP: 192.168.2.107'. Sản xuất chứng chỉ mới và thêm vào máy chủ + máy khách. Cảm ơn bạn đã giúp đỡ! :)
nối

9

Có một kịch bản để tạo ra các certs thích hợp cho lumberjack đã được đề cập trên một vé github logstash: Bắt tay SSL không thành công vì IP SAN bị thiếu

Tải tập tin:

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

... xây dựng nó:

go build lc-tlscert.go

..và chạy:

./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
Điều này đã tiết kiệm cho tôi rất nhiều thời gian ngày hôm nay ... mặc dù cho người chạy gitlab. Cảm ơn bạn!
Matt Messersmith

6

Tôi đã có một vấn đề thực sự với điều này. Tôi không sử dụng logstash, tôi chỉ đơn giản là cố gắng để IP SAN hoạt động với docker tls. Tôi sẽ tạo chứng chỉ như được mô tả trong bài viết về docker trên https ( https://docs.docker.com/articles/https/ ), sau đó khi tôi sẽ kết nối từ máy khách docker:

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

Tôi sẽ nhận được lỗi này:

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

Điều đó làm tôi phát điên. Tôi thừa nhận, tôi vấp ngã trong tất cả mọi thứ openssl, vì vậy, mọi người có thể đã biết những gì tôi khám phá. Ví dụ topicAltName ở đây (và mọi nơi khác) hiển thị cập nhật tệp openssl.cnf. Tôi không thể làm việc đó. Tôi đã xác định vị trí trên openssl.cnf, sao chép nó vào một thư mục cục bộ, sau đó thực hiện các thay đổi cho nó. Khi tôi kiểm tra chứng chỉ, nó không chứa phần mở rộng:

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

Lệnh đang được sử dụng để tạo chứng chỉ đó ở đây (từ bài viết về docker):

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

Bạn không thể thêm một dòng -config openssl.cnf vào lệnh này, nó không hợp lệ. Bạn cũng không thể sao chép tệp openssl.cnf vào thư mục hiện tại, sửa đổi nó và hy vọng làm cho nó hoạt động theo cách đó. Một vài dòng sau tôi nhận thấy rằng chứng chỉ 'client' sử dụng một extfile.cnf -extfile. Vì vậy, tôi đã thử điều này:

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

và nó đã sửa nó. Vì vậy, vì bất kỳ lý do gì, phiên bản openssl của tôi không cho phép tôi sửa đổi tệp openssl.cnf, nhưng, tôi có thể chỉ định chủ đềAltName như thế này. Hoạt động tuyệt vời!

Bạn có thể chỉ định bất kỳ số lượng địa chỉ IP nào, như IP: 127.0.0.1, IP: 127.0.1.1 (không phải localhost).


À-Hà! Cảm ơn bạn, tôi đang làm điều tương tự như bạn với docker và nhấn vấn đề này. Tôi sẽ thử đề xuất của bạn bây giờ.
Mark Jones

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.