logstash-input-tcp 5.0.9-java → 5.0.10-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -1
- data/docs/index.asciidoc +17 -5
- data/lib/logstash/inputs/tcp.rb +8 -1
- data/spec/inputs/tcp_spec.rb +49 -22
- data/vendor/jar-dependencies/org/logstash/inputs/logstash-input-tcp/{5.0.9/logstash-input-tcp-5.0.9.jar → 5.0.10/logstash-input-tcp-5.0.10.jar} +0 -0
- data/version +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f637d5ed9693d5beb15a48cdd0fea3add3c5df312cf5efce134570c62ede5778
|
4
|
+
data.tar.gz: bba5e2a6a9e4b3ce69af2ddf9e3941125388df73504c9345f24342372aa2338c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdbdff7d0d2de89aada8254d93d72f528cb0bd1b605af6bdb7533a831c89492b34af296d142726c68a5d863727cedd344bb4c9e8f5ef356dfc491e442bc83eb2
|
7
|
+
data.tar.gz: e74e3262ea1c3f7f10ae82653e3a581361fadf9daafb0a44926f3f47138c0ef1e3c620ce013fb03cfd010858e8e79b865b23e95156fdcc9bea3c0489e0ee859b
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
+
## 5.0.10
|
2
|
+
- Correctly set up the certificate chain so that the server will present cert + chain to client
|
3
|
+
|
1
4
|
## 5.0.9
|
2
5
|
- New configuration option to set TCP keep-alive [#16](https://github.com/logstash-plugins/logstash-input-tcp/pull/116)
|
3
|
-
|
6
|
+
|
4
7
|
## 5.0.8
|
5
8
|
- Reorder shut down of the two event loops to prevent RejectedExecutionException
|
6
9
|
|
data/docs/index.asciidoc
CHANGED
@@ -83,6 +83,7 @@ This plugin supports the following configuration options plus the <<plugins-{typ
|
|
83
83
|
| <<plugins-{type}s-{plugin}-port>> |<<number,number>>|Yes
|
84
84
|
| <<plugins-{type}s-{plugin}-proxy_protocol>> |<<boolean,boolean>>|No
|
85
85
|
| <<plugins-{type}s-{plugin}-ssl_cert>> |a valid filesystem path|No
|
86
|
+
| <<plugins-{type}s-{plugin}-ssl_certificate_authorities>> |<<array,array>>|No
|
86
87
|
| <<plugins-{type}s-{plugin}-ssl_enable>> |<<boolean,boolean>>|No
|
87
88
|
| <<plugins-{type}s-{plugin}-ssl_extra_chain_certs>> |<<array,array>>|No
|
88
89
|
| <<plugins-{type}s-{plugin}-ssl_key>> |a valid filesystem path|No
|
@@ -139,7 +140,17 @@ http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt
|
|
139
140
|
* Value type is <<path,path>>
|
140
141
|
* There is no default value for this setting.
|
141
142
|
|
142
|
-
|
143
|
+
Path to certificate in PEM format. This certificate will be presented
|
144
|
+
to the connecting clients.
|
145
|
+
|
146
|
+
[id="plugins-{type}s-{plugin}-ssl_certificate_authorities"]
|
147
|
+
===== `ssl_extra_chain_certs`
|
148
|
+
|
149
|
+
* Value type is <<array,array>>
|
150
|
+
* Default value is `[]`
|
151
|
+
|
152
|
+
Validate client certificate or certificate chain against these authorities.
|
153
|
+
You can define multiple files or paths. All the certificates will be read and added to the trust store.
|
143
154
|
|
144
155
|
[id="plugins-{type}s-{plugin}-ssl_enable"]
|
145
156
|
===== `ssl_enable`
|
@@ -155,8 +166,9 @@ Enable SSL (must be set for other `ssl_` options to take effect).
|
|
155
166
|
* Value type is <<array,array>>
|
156
167
|
* Default value is `[]`
|
157
168
|
|
158
|
-
An Array of extra X509 certificates
|
159
|
-
|
169
|
+
An Array of paths to extra X509 certificates.
|
170
|
+
These are used together with the certificate to construct the certificate chain
|
171
|
+
presented to the client.
|
160
172
|
|
161
173
|
[id="plugins-{type}s-{plugin}-ssl_key"]
|
162
174
|
===== `ssl_key`
|
@@ -164,7 +176,7 @@ Useful when the CA chain is not necessary in the system store.
|
|
164
176
|
* Value type is <<path,path>>
|
165
177
|
* There is no default value for this setting.
|
166
178
|
|
167
|
-
|
179
|
+
The path to the private key corresponding to the specified certificate (PEM format).
|
168
180
|
|
169
181
|
[id="plugins-{type}s-{plugin}-ssl_key_passphrase"]
|
170
182
|
===== `ssl_key_passphrase`
|
@@ -172,7 +184,7 @@ SSL key path
|
|
172
184
|
* Value type is <<password,password>>
|
173
185
|
* Default value is `nil`
|
174
186
|
|
175
|
-
SSL key passphrase
|
187
|
+
SSL key passphrase for the private key.
|
176
188
|
|
177
189
|
[id="plugins-{type}s-{plugin}-ssl_verify"]
|
178
190
|
===== `ssl_verify`
|
data/lib/logstash/inputs/tcp.rb
CHANGED
@@ -105,6 +105,9 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
105
105
|
# Useful when the CA chain is not necessary in the system store.
|
106
106
|
config :ssl_extra_chain_certs, :validate => :array, :default => []
|
107
107
|
|
108
|
+
# Validate client certificates against these authorities. You can define multiple files or paths. All the certificates will be read and added to the trust store.
|
109
|
+
config :ssl_certificate_authorities, :validate => :array, :default => []
|
110
|
+
|
108
111
|
# Instruct the socket to use TCP keep alives. Uses OS defaults for keep alive settings.
|
109
112
|
config :tcp_keep_alive, :validate => :boolean, :default => false
|
110
113
|
|
@@ -310,6 +313,10 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
310
313
|
@ssl_context = OpenSSL::SSL::SSLContext.new
|
311
314
|
@ssl_context.cert = OpenSSL::X509::Certificate.new(File.read(@ssl_cert))
|
312
315
|
@ssl_context.key = OpenSSL::PKey::RSA.new(File.read(@ssl_key),@ssl_key_passphrase.value)
|
316
|
+
if @ssl_extra_chain_certs.any?
|
317
|
+
@ssl_context.extra_chain_cert = @ssl_extra_chain_certs.map {|cert_path| OpenSSL::X509::Certificate.new(File.read(cert_path)) }
|
318
|
+
@ssl_context.extra_chain_cert.unshift(OpenSSL::X509::Certificate.new(File.read(@ssl_cert)))
|
319
|
+
end
|
313
320
|
if @ssl_verify
|
314
321
|
@ssl_context.cert_store = load_cert_store
|
315
322
|
@ssl_context.verify_mode = OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
|
@@ -325,7 +332,7 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
|
|
325
332
|
def load_cert_store
|
326
333
|
cert_store = OpenSSL::X509::Store.new
|
327
334
|
cert_store.set_default_paths
|
328
|
-
@
|
335
|
+
@ssl_certificate_authorities.each do |cert|
|
329
336
|
cert_store.add_file(cert)
|
330
337
|
end
|
331
338
|
cert_store
|
data/spec/inputs/tcp_spec.rb
CHANGED
@@ -335,11 +335,9 @@ describe LogStash::Inputs::Tcp do
|
|
335
335
|
end
|
336
336
|
|
337
337
|
context "when ssl_enable is true" do
|
338
|
-
let(:
|
339
|
-
let(:certificate) {
|
340
|
-
let(:key) {
|
341
|
-
let(:certificate_file) { Stud::Temporary.file }
|
342
|
-
let(:key_file) { Stud::Temporary.file }
|
338
|
+
let(:self_signed_cert) { helper.certificate }
|
339
|
+
let(:certificate) { self_signed_cert.first }
|
340
|
+
let(:key) { self_signed_cert.last }
|
343
341
|
let(:queue) { Queue.new }
|
344
342
|
|
345
343
|
let(:config) do
|
@@ -347,30 +345,59 @@ describe LogStash::Inputs::Tcp do
|
|
347
345
|
"host" => "127.0.0.1",
|
348
346
|
"port" => port,
|
349
347
|
"ssl_enable" => true,
|
350
|
-
"ssl_cert" =>
|
351
|
-
"ssl_key" =>
|
352
|
-
|
353
|
-
# Trust our self-signed cert.
|
354
|
-
# TODO(sissel): Make this a separate certificate for the client
|
355
|
-
"ssl_extra_chain_certs" => certificate_file.path
|
348
|
+
"ssl_cert" => certificate.path,
|
349
|
+
"ssl_key" => key.path,
|
350
|
+
"ssl_certificate_authorities" => certificate.path
|
356
351
|
}
|
357
352
|
end
|
358
353
|
|
359
354
|
subject(:input) { LogStash::Plugin.lookup("input", "tcp").new(config) }
|
360
355
|
|
361
356
|
before do
|
362
|
-
certificate_file.write(certificate)
|
363
|
-
key_file.write(key)
|
364
|
-
|
365
|
-
# Close to flush the file writes.
|
366
|
-
certificate_file.close
|
367
|
-
key_file.close
|
368
357
|
subject.register
|
369
358
|
end
|
370
359
|
|
371
|
-
|
372
|
-
|
373
|
-
|
360
|
+
context "when using a certificate chain" do
|
361
|
+
let(:chain_of_certificates) { helper.chain_of_certificates }
|
362
|
+
let(:config) do
|
363
|
+
{
|
364
|
+
"host" => "127.0.0.1",
|
365
|
+
"port" => port,
|
366
|
+
"ssl_enable" => true,
|
367
|
+
"ssl_cert" => chain_of_certificates[:b_cert].path,
|
368
|
+
"ssl_key" => chain_of_certificates[:b_key].path,
|
369
|
+
"ssl_extra_chain_certs" => [ chain_of_certificates[:a_cert].path ],
|
370
|
+
"ssl_certificate_authorities" => [ chain_of_certificates[:root_ca].path ],
|
371
|
+
"ssl_verify" => true
|
372
|
+
}
|
373
|
+
end
|
374
|
+
let(:tcp) { TCPSocket.new("127.0.0.1", port) }
|
375
|
+
let(:sslcontext) do
|
376
|
+
sslcontext = OpenSSL::SSL::SSLContext.new
|
377
|
+
sslcontext.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
378
|
+
sslcontext.ca_file = chain_of_certificates[:root_ca].path
|
379
|
+
sslcontext.cert = OpenSSL::X509::Certificate.new(File.read(chain_of_certificates[:aa_cert].path))
|
380
|
+
sslcontext.key = OpenSSL::PKey::RSA.new(File.read(chain_of_certificates[:aa_key].path))
|
381
|
+
sslcontext
|
382
|
+
end
|
383
|
+
let(:sslsocket) { OpenSSL::SSL::SSLSocket.new(tcp, sslcontext) }
|
384
|
+
let(:input_task) { Stud::Task.new { input.run(queue) } }
|
385
|
+
|
386
|
+
before do
|
387
|
+
input_task
|
388
|
+
end
|
389
|
+
|
390
|
+
it "should be able to connect and write data" do
|
391
|
+
sslsocket.connect
|
392
|
+
sslsocket.write("Hello world\n")
|
393
|
+
tcp.flush
|
394
|
+
sslsocket.close
|
395
|
+
tcp.close
|
396
|
+
result = input_task.thread.join(0.5)
|
397
|
+
expect(result).to be_nil
|
398
|
+
expect(queue.size).to eq(1)
|
399
|
+
end
|
400
|
+
|
374
401
|
end
|
375
402
|
|
376
403
|
context "with a poorly-behaving client" do
|
@@ -456,8 +483,8 @@ describe LogStash::Inputs::Tcp do
|
|
456
483
|
let(:garbage) { Flores::Random.iterations(max_length).collect { Flores::Random.integer(1...255) }.pack("C*") }
|
457
484
|
|
458
485
|
before do
|
459
|
-
sslcontext.cert = certificate
|
460
|
-
sslcontext.key = key
|
486
|
+
sslcontext.cert = OpenSSL::X509::Certificate.new(File.read(certificate))
|
487
|
+
sslcontext.key = OpenSSL::PKey::RSA.new(File.read(key))
|
461
488
|
sslcontext.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
462
489
|
|
463
490
|
sslsocket.connect
|
Binary file
|
data/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.0.
|
1
|
+
5.0.10
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-tcp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.10
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -163,7 +163,7 @@ files:
|
|
163
163
|
- logstash-input-tcp.gemspec
|
164
164
|
- spec/inputs/tcp_spec.rb
|
165
165
|
- spec/spec_helper.rb
|
166
|
-
- vendor/jar-dependencies/org/logstash/inputs/logstash-input-tcp/5.0.
|
166
|
+
- vendor/jar-dependencies/org/logstash/inputs/logstash-input-tcp/5.0.10/logstash-input-tcp-5.0.10.jar
|
167
167
|
- version
|
168
168
|
homepage: http://www.elastic.co/guide/en/logstash/current/index.html
|
169
169
|
licenses:
|