logstash-input-beats 3.1.18-java → 3.1.19-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 +3 -0
- data/VERSION +1 -1
- data/lib/logstash-input-beats_jars.rb +1 -1
- data/lib/tasks/test.rake +3 -2
- data/spec/integration/filebeat_spec.rb +11 -5
- data/spec/support/client_process_helpers.rb +15 -2
- data/spec/support/flores_extensions.rb +52 -29
- data/spec/support/integration_shared_context.rb +1 -1
- data/vendor/jar-dependencies/org/logstash/beats/logstash-input-beats/{3.1.18/logstash-input-beats-3.1.18.jar → 3.1.19/logstash-input-beats-3.1.19.jar} +0 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97c1ad83b25e92e16acb2dde75a8d7d0796c7cd8
|
4
|
+
data.tar.gz: d684f40a578b5ec09f260b5d9e6d55e97bbb1d30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d7f83a1fb266ee9b66cb219a09b5eef81c61a61fd87527e275c07a0e42dbed405183353f632c717822bbc8825f6ba4f248bf41b7bd03660e8b51068b98e9081
|
7
|
+
data.tar.gz: d26d3a488875ebaada9cbe5710926a0c682331a5c7cbb529e9034d2546a8a8fef0f3e9bb86207897b46ccd03d15899ee7a94fc924db23609d04a80667af20279
|
data/CHANGELOG.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.
|
1
|
+
3.1.19
|
@@ -9,4 +9,4 @@ require_jar('com.fasterxml.jackson.core', 'jackson-annotations', '2.7.5')
|
|
9
9
|
require_jar('com.fasterxml.jackson.core', 'jackson-databind', '2.7.5')
|
10
10
|
require_jar('com.fasterxml.jackson.module', 'jackson-module-afterburner', '2.7.5')
|
11
11
|
require_jar('log4j', 'log4j', '1.2.17')
|
12
|
-
require_jar('org.logstash.beats', 'logstash-input-beats', '3.1.
|
12
|
+
require_jar('org.logstash.beats', 'logstash-input-beats', '3.1.19')
|
data/lib/tasks/test.rake
CHANGED
@@ -2,10 +2,11 @@
|
|
2
2
|
OS_PLATFORM = RbConfig::CONFIG["host_os"]
|
3
3
|
VENDOR_PATH = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "vendor"))
|
4
4
|
|
5
|
+
#TODO: Figure out better means to keep this version in sync
|
5
6
|
if OS_PLATFORM == "linux"
|
6
|
-
FILEBEAT_URL = "https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-
|
7
|
+
FILEBEAT_URL = "https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-alpha2-linux-x86_64.tar.gz"
|
7
8
|
elsif OS_PLATFORM == "darwin"
|
8
|
-
FILEBEAT_URL = "https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-
|
9
|
+
FILEBEAT_URL = "https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-alpha2-darwin-x86_64.tar.gz"
|
9
10
|
end
|
10
11
|
|
11
12
|
LSF_URL = "https://download.elastic.co/logstash-forwarder/binaries/logstash-forwarder_#{OS_PLATFORM}_amd64"
|
@@ -52,6 +52,7 @@ describe "Filebeat", :integration => true do
|
|
52
52
|
before :each do
|
53
53
|
FileUtils.rm_rf(File.join(File.dirname(__FILE__), "..", "..", "vendor", "filebeat", "data"))
|
54
54
|
start_client
|
55
|
+
raise 'Filebeat did not start in alloted time' unless is_alive
|
55
56
|
sleep(20) # give some time to FB to send something
|
56
57
|
end
|
57
58
|
|
@@ -76,7 +77,7 @@ describe "Filebeat", :integration => true do
|
|
76
77
|
end
|
77
78
|
|
78
79
|
############################################################
|
79
|
-
# Actuals tests
|
80
|
+
# Actuals tests
|
80
81
|
context "Plain TCP" do
|
81
82
|
include_examples "send events"
|
82
83
|
end
|
@@ -190,6 +191,9 @@ describe "Filebeat", :integration => true do
|
|
190
191
|
context "CA root" do
|
191
192
|
include_context "Root CA"
|
192
193
|
|
194
|
+
let_tmp_file(:certificate_key_file) { convert_to_pkcs8(certificate_data.last) }
|
195
|
+
let_tmp_file(:certificate_file) { certificate_data.first }
|
196
|
+
|
193
197
|
context "directly signed client certificate" do
|
194
198
|
let(:certificate_authorities) { [root_ca_certificate_file] }
|
195
199
|
let(:certificate_data) { Flores::PKI.create_client_certicate("CN=localhost", root_ca_certificate, root_ca_key) }
|
@@ -202,7 +206,7 @@ describe "Filebeat", :integration => true do
|
|
202
206
|
|
203
207
|
let(:certificate_data) { Flores::PKI.create_client_certicate("CN=localhost", intermediate_ca_certificate, intermediate_ca_key) }
|
204
208
|
let(:certificate_authorities) { [certificate_authorities_chain] }
|
205
|
-
|
209
|
+
|
206
210
|
include_examples "send events"
|
207
211
|
end
|
208
212
|
end
|
@@ -224,7 +228,7 @@ describe "Filebeat", :integration => true do
|
|
224
228
|
end
|
225
229
|
|
226
230
|
let(:input_config) do
|
227
|
-
super.merge({
|
231
|
+
super.merge({
|
228
232
|
"ssl" => true,
|
229
233
|
"ssl_certificate_authorities" => certificate_authorities,
|
230
234
|
"ssl_certificate" => server_certificate_file,
|
@@ -249,6 +253,8 @@ describe "Filebeat", :integration => true do
|
|
249
253
|
|
250
254
|
let_tmp_file(:server_certificate_file) { server_certificate_data.first }
|
251
255
|
let_tmp_file(:server_certificate_key_file) { convert_to_pkcs8(server_certificate_data.last) }
|
256
|
+
let_tmp_file(:certificate_file) { certificate_data.first }
|
257
|
+
let_tmp_file(:certificate_key_file) { convert_to_pkcs8(certificate_data.last) }
|
252
258
|
|
253
259
|
context "directly signed client certificate" do
|
254
260
|
let(:certificate_authorities) { [root_ca_certificate_file] }
|
@@ -262,7 +268,7 @@ describe "Filebeat", :integration => true do
|
|
262
268
|
include_context "Intermediate CA"
|
263
269
|
|
264
270
|
let(:certificate_data) { Flores::PKI.create_client_certicate("CN=localhost", intermediate_ca_certificate, intermediate_ca_key) }
|
265
|
-
let(:server_certificate_data) { Flores::PKI.create_client_certicate("CN=localhost", intermediate_ca_certificate, intermediate_ca_key) }
|
271
|
+
let(:server_certificate_data) { Flores::PKI.create_client_certicate("CN=localhost", intermediate_ca_certificate, intermediate_ca_key) }
|
266
272
|
let(:certificate_authorities) { [intermediate_ca_certificate_file] }
|
267
273
|
|
268
274
|
include_examples "send events"
|
@@ -298,7 +304,7 @@ describe "Filebeat", :integration => true do
|
|
298
304
|
|
299
305
|
let(:server_certificate_data) { Flores::PKI.create_client_certicate("CN=localhost", root_ca_certificate, root_ca_key) }
|
300
306
|
|
301
|
-
context "client from primary CA" do
|
307
|
+
context "client from primary CA" do
|
302
308
|
include_examples "send events"
|
303
309
|
end
|
304
310
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "childprocess"
|
3
3
|
module ClientProcessHelpers
|
4
|
-
def start_client(timeout =
|
4
|
+
def start_client(timeout = 5)
|
5
5
|
@client_out = Stud::Temporary.file
|
6
6
|
@client_out.sync
|
7
7
|
|
@@ -11,13 +11,26 @@ module ClientProcessHelpers
|
|
11
11
|
ChildProcess.posix_spawn = true
|
12
12
|
@process.start
|
13
13
|
|
14
|
-
|
14
|
+
sleep_interval = 0.1
|
15
|
+
max_iterations = (timeout / sleep_interval).to_i
|
16
|
+
max_iterations.times do
|
17
|
+
sleep(sleep_interval)
|
18
|
+
if @process.alive?
|
19
|
+
break
|
20
|
+
end
|
21
|
+
end
|
22
|
+
#Note - can not raise error here if process failed to start, since some tests expects for the process to not start due to invalid configuration
|
23
|
+
|
15
24
|
@client_out.rewind
|
16
25
|
|
17
26
|
# can be used to helper debugging when a test fails
|
18
27
|
@execution_output = @client_out.read
|
19
28
|
end
|
20
29
|
|
30
|
+
def is_alive
|
31
|
+
return @process.alive?
|
32
|
+
end
|
33
|
+
|
21
34
|
def stop_client
|
22
35
|
begin
|
23
36
|
@process.poll_for_exit(5)
|
@@ -1,49 +1,68 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "flores/pki"
|
3
3
|
require "flores/random"
|
4
|
+
require "socket"
|
4
5
|
|
5
6
|
module Flores
|
6
7
|
module Random
|
7
8
|
DEFAULT_PORT_RANGE = 1024..65535
|
8
|
-
DEFAULT_PORT_CHECK_TIMEOUT = 1
|
9
|
-
DEFAULT_MAXIMUM_PORT_FIND_TRY = 15
|
10
|
-
|
11
9
|
class << self
|
12
10
|
def port(range = DEFAULT_PORT_RANGE)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
integer(range)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module PKI
|
17
|
+
|
18
|
+
# Monkey patched the fix for https://github.com/jordansissel/ruby-flores/issues/9
|
19
|
+
# TODO: remove this once Flores is released with fix.
|
20
|
+
CertificateSigningRequest.class_eval do
|
21
|
+
def create
|
22
|
+
validate!
|
23
|
+
extensions = OpenSSL::X509::ExtensionFactory.new
|
24
|
+
extensions.subject_certificate = certificate
|
25
|
+
extensions.issuer_certificate = self_signed? ? certificate : signing_certificate
|
26
|
+
|
27
|
+
certificate.issuer = extensions.issuer_certificate.subject
|
28
|
+
certificate.add_extension(extensions.create_extension("subjectKeyIdentifier", "hash", false))
|
29
|
+
|
30
|
+
if want_signature_ability?
|
31
|
+
# Create a CA.
|
32
|
+
certificate.add_extension(extensions.create_extension("basicConstraints", "CA:TRUE", true))
|
33
|
+
# Rough googling seems to indicate at least keyCertSign is required for CA and intermediate certs.
|
34
|
+
certificate.add_extension(extensions.create_extension("keyUsage", "keyCertSign, cRLSign, digitalSignature", true))
|
35
|
+
else
|
36
|
+
# Create a client+server certificate
|
37
|
+
#
|
38
|
+
# It feels weird to create a certificate that's valid as both server and client, but a brief inspection of major
|
39
|
+
# web properties (apple.com, google.com, yahoo.com, github.com, fastly.com, mozilla.com, amazon.com) reveals that
|
40
|
+
# major web properties have certificates with both clientAuth and serverAuth extended key usages. Further,
|
41
|
+
# these major server certificates all have digitalSignature and keyEncipherment for key usage.
|
42
|
+
#
|
43
|
+
# Here's the command I used to check this:
|
44
|
+
# echo mozilla.com apple.com github.com google.com yahoo.com fastly.com elastic.co amazon.com \
|
45
|
+
# | xargs -n1 sh -c 'openssl s_client -connect $1:443 \
|
46
|
+
# | sed -ne "/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p" \
|
47
|
+
# | openssl x509 -text -noout | sed -ne "/X509v3 extensions/,/Signature Algorithm/p" | sed -e "s/^/$1 /"' - \
|
48
|
+
# | grep -A2 'Key Usage'
|
49
|
+
certificate.add_extension(extensions.create_extension("keyUsage", "digitalSignature, keyEncipherment", true))
|
50
|
+
certificate.add_extension(extensions.create_extension("extendedKeyUsage", "clientAuth, serverAuth", false))
|
22
51
|
end
|
23
|
-
|
24
|
-
raise "Flores.random_port: Cannot find an available port, tried #{DEFAULT_MAXIMUM_PORT_FIND_TRY} times, range was: #{range}" if try == DEFAULT_MAXIMUM_PORT_FIND_TRY
|
25
52
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
def port_available?(port)
|
30
|
-
begin
|
31
|
-
server = TCPServer.new(port)
|
32
|
-
available = true
|
33
|
-
rescue # Assume that any errors can do this
|
34
|
-
available = false
|
35
|
-
ensure
|
36
|
-
server.close if server
|
53
|
+
if @subject_alternates
|
54
|
+
certificate.add_extension(extensions.create_extension("subjectAltName", @subject_alternates.join(",")))
|
37
55
|
end
|
38
56
|
|
39
|
-
|
57
|
+
certificate.serial = OpenSSL::BN.new(serial)
|
58
|
+
certificate.sign(signing_key, digest_method)
|
59
|
+
certificate
|
40
60
|
end
|
41
61
|
end
|
42
|
-
end
|
43
62
|
|
44
|
-
|
63
|
+
|
45
64
|
DEFAULT_CERTIFICATE_OPTIONS = {
|
46
|
-
:duration =>
|
65
|
+
:duration => 86400, #one day
|
47
66
|
:key_size => GENERATE_DEFAULT_KEY_SIZE,
|
48
67
|
:exponent => GENERATE_DEFAULT_EXPONENT,
|
49
68
|
:want_signature_ability => false
|
@@ -78,5 +97,9 @@ module Flores
|
|
78
97
|
|
79
98
|
[csr.create, client_key]
|
80
99
|
end
|
100
|
+
|
101
|
+
|
102
|
+
|
81
103
|
end
|
82
104
|
end
|
105
|
+
|
@@ -3,7 +3,7 @@ require "flores/random"
|
|
3
3
|
|
4
4
|
shared_examples "send events" do
|
5
5
|
it "successfully send the events" do
|
6
|
-
try(
|
6
|
+
try(25) { expect(queue.size).to eq(number_of_events), "Expected: #{number_of_events} got: #{queue.size}, execution output:\n #{@execution_output}" }
|
7
7
|
expect(queue.collect { |e| e.get("message") }).to eq(events)
|
8
8
|
end
|
9
9
|
end
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-beats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.19
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -264,7 +264,7 @@ files:
|
|
264
264
|
- vendor/jar-dependencies/io/netty/netty-tcnative-boringssl-static/1.1.33.Fork23/netty-tcnative-boringssl-static-1.1.33.Fork23.jar
|
265
265
|
- vendor/jar-dependencies/log4j/log4j/1.2.17/log4j-1.2.17.jar
|
266
266
|
- vendor/jar-dependencies/org/javassist/javassist/3.20.0-GA/javassist-3.20.0-GA.jar
|
267
|
-
- vendor/jar-dependencies/org/logstash/beats/logstash-input-beats/3.1.
|
267
|
+
- vendor/jar-dependencies/org/logstash/beats/logstash-input-beats/3.1.19/logstash-input-beats-3.1.19.jar
|
268
268
|
homepage: http://www.elastic.co/guide/en/logstash/current/index.html
|
269
269
|
licenses:
|
270
270
|
- Apache License (2.0)
|