logstash-output-tcp 6.2.2 → 7.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12e6eaa4720dc56a6588aae77dd029643860e9ee7bfd92e5afe8893c32773f39
4
- data.tar.gz: dd6cc7805773a7a5151aeb43c72a2d5f6122aee654c14cf206a41bdb870ca0be
3
+ metadata.gz: d6f831af52dc575cf49b8bd64ac494753bbc852bb8cdc37df12ff7c1b0b40a7f
4
+ data.tar.gz: c0fd08ae08b9b9518f37164539db57a137ffea4c1a92b82915b2678f329b4247
5
5
  SHA512:
6
- metadata.gz: e1a94857cb7891d1c95b30f14e19967e1a46a56c1b3380d479d064b5094318ec598914b268e13bd8c101e5234241ba0534410808152bfe1fd02d03bb63efdf0a
7
- data.tar.gz: e16e659b6b97859000185d15321a2dd6c805da96628464b0989db7a6cf1879c7270309ce2eb5ba49266ea4582182f8d04183f2c7ea62094ff38b5a5053c5a168
6
+ metadata.gz: 3d2bf294da64059cdfd5d25ab58172e8b0d02011b9657fc72bbda2e4839d71ef64465405af9320fbaff72c2c4e76308fd696577f84c4eabad7e52bd8011ce6ca
7
+ data.tar.gz: 6ec47a3647e01a3324ddfdf9c0804d14aafa610e5e648d65fa90e37c89831cf1a8f5e3c3f709c564d9ae3bd55a794af62d9bbca8f2d098e0963e347e7a5ed85e
data/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
- ## 6.2.2
2
- - Invoke post_connection_check on connect [#61](https://github.com/logstash-plugins/logstash-output-tcp/pull/61)
3
-
1
+ ## 7.0.0
2
+ - SSL settings that were marked deprecated in version `6.2.0` are now marked obsolete, and will prevent the plugin from starting.
3
+ - These settings are:
4
+ - `ssl_cert`, which should be replaced by `ssl_certificate`
5
+ - `ssl_cacert`, which should be replaced by `ssl_certificate_authorities`
6
+ - `ssl_enable`, which should be replaced by `ssl_enabled`
7
+ - `ssl_verify`, which should be replaced by `ssl_client_authentication` when `mode` is `server` or `ssl_verification_mode`when mode is `client`
8
+ - [58](https://github.com/logstash-plugins/logstash-output-tcp/pull/58)
4
9
  ## 6.2.1
5
10
  - Document correct default plugin codec [#54](https://github.com/logstash-plugins/logstash-output-tcp/pull/54)
6
11
 
data/docs/index.asciidoc CHANGED
@@ -33,6 +33,10 @@ depending on `mode`.
33
33
 
34
34
  This plugin supports the following configuration options plus the <<plugins-{type}s-{plugin}-common-options>> described later.
35
35
 
36
+ NOTE: As of version `7.0.0` of this plugin, a number of previously deprecated settings related to SSL have been removed. Please see the
37
+ <<plugins-{type}s-{plugin}-obsolete-options>> for more details.
38
+
39
+
36
40
  [cols="<,<,<",options="header",]
37
41
  |=======================================================================
38
42
  |Setting |Input type|Required
@@ -40,19 +44,15 @@ This plugin supports the following configuration options plus the <<plugins-{typ
40
44
  | <<plugins-{type}s-{plugin}-mode>> |<<string,string>>, one of `["server", "client"]`|No
41
45
  | <<plugins-{type}s-{plugin}-port>> |<<number,number>>|Yes
42
46
  | <<plugins-{type}s-{plugin}-reconnect_interval>> |<<number,number>>|No
43
- | <<plugins-{type}s-{plugin}-ssl_cacert>> |a valid filesystem path|__Deprecated__
44
- | <<plugins-{type}s-{plugin}-ssl_cert>> |a valid filesystem path|__Deprecated__
45
47
  | <<plugins-{type}s-{plugin}-ssl_certificate>> |a valid filesystem path|No
46
48
  | <<plugins-{type}s-{plugin}-ssl_certificate_authorities>> |<<array,array>>|No
47
49
  | <<plugins-{type}s-{plugin}-ssl_cipher_suites>> |<<string,string>>|No
48
50
  | <<plugins-{type}s-{plugin}-ssl_client_authentication>> |<<string,string>>, one of `["none", "optional", "required"]`|No
49
- | <<plugins-{type}s-{plugin}-ssl_enable>> |<<boolean,boolean>>|__Deprecated__
50
51
  | <<plugins-{type}s-{plugin}-ssl_enabled>> |<<boolean,boolean>>|No
51
52
  | <<plugins-{type}s-{plugin}-ssl_key>> |a valid filesystem path|No
52
53
  | <<plugins-{type}s-{plugin}-ssl_key_passphrase>> |<<password,password>>|No
53
54
  | <<plugins-{type}s-{plugin}-ssl_supported_protocols>> |<<string,string>>|No
54
55
  | <<plugins-{type}s-{plugin}-ssl_verification_mode>> |<<string,string>>, one of `["full", "none"]`|No
55
- | <<plugins-{type}s-{plugin}-ssl_verify>> |<<boolean,boolean>>|No
56
56
  |=======================================================================
57
57
 
58
58
  Also see <<plugins-{type}s-{plugin}-common-options>> for a list of options supported by all
@@ -97,24 +97,6 @@ When mode is `client`, the port to connect to.
97
97
 
98
98
  When connect failed,retry interval in sec.
99
99
 
100
- [id="plugins-{type}s-{plugin}-ssl_cacert"]
101
- ===== `ssl_cacert`
102
- deprecated[6.2.0, Replaced by <<plugins-{type}s-{plugin}-ssl_certificate_authorities>>]
103
-
104
- * Value type is <<path,path>>
105
- * There is no default value for this setting.
106
-
107
- The SSL CA certificate, chainfile or CA path. The system CA path is automatically included.
108
-
109
- [id="plugins-{type}s-{plugin}-ssl_cert"]
110
- ===== `ssl_cert`
111
- deprecated[6.2.0, Replaced by <<plugins-{type}s-{plugin}-ssl_certificate>>]
112
-
113
- * Value type is <<path,path>>
114
- * There is no default value for this setting.
115
-
116
- SSL certificate path
117
-
118
100
  [id="plugins-{type}s-{plugin}-ssl_certificate"]
119
101
  ===== `ssl_certificate`
120
102
 
@@ -160,15 +142,6 @@ Please note that the server does not validate the client certificate CN (Common
160
142
  NOTE: This setting can be used only if <<plugins-{type}s-{plugin}-mode>> is `server` and <<plugins-{type}s-{plugin}-ssl_certificate_authorities>> is set.
161
143
 
162
144
 
163
- [id="plugins-{type}s-{plugin}-ssl_enable"]
164
- ===== `ssl_enable`
165
- deprecated[6.2.0, Replaced by <<plugins-{type}s-{plugin}-ssl_enabled>>]
166
-
167
- * Value type is <<boolean,boolean>>
168
- * Default value is `false`
169
-
170
- Enable SSL (must be set for other `ssl_` options to take effect).
171
-
172
145
  [id="plugins-{type}s-{plugin}-ssl_enabled"]
173
146
  ===== `ssl_enabled`
174
147
 
@@ -223,15 +196,21 @@ has a hostname or IP address that matches the names within the certificate.
223
196
 
224
197
  NOTE: This setting can be used only if <<plugins-{type}s-{plugin}-mode>> is `client`.
225
198
 
226
- [id="plugins-{type}s-{plugin}-ssl_verify"]
227
- ===== `ssl_verify`
228
- deprecated[6.2.0, Replaced by <<plugins-{type}s-{plugin}-ssl_client_authentication>> and <<plugins-{type}s-{plugin}-ssl_verification_mode>>]
199
+ [id="plugins-{type}s-{plugin}-obsolete-options"]
200
+ ==== TCP Output Obsolete Configuration Options
201
+
202
+ WARNING: As of version `6.0.0` of this plugin, some configuration options have been replaced.
203
+ The plugin will fail to start if it contains any of these obsolete options.
229
204
 
230
- * Value type is <<boolean,boolean>>
231
- * Default value is `false`
232
205
 
233
- Verify the identity of the other end of the SSL connection against the CA.
234
- For input, sets the field `sslsubject` to that of the client certificate.
206
+ [cols="<,<",options="header",]
207
+ |=======================================================================
208
+ |Setting|Replaced by
209
+ | ssl_cacert |<<plugins-{type}s-{plugin}-ssl_certificate_authorities>>
210
+ | ssl_cert |<<plugins-{type}s-{plugin}-ssl_certificate>>
211
+ | ssl_enable |<<plugins-{type}s-{plugin}-ssl_enabled>>
212
+ | ssl_verify |<<plugins-{type}s-{plugin}-ssl_client_authentication>> in `server` mode and <<plugins-{type}s-{plugin}-ssl_verification_mode>> in `client` mode
213
+ |=======================================================================
235
214
 
236
215
  [id="plugins-{type}s-{plugin}-common-options"]
237
216
  include::{include_path}/{type}.asciidoc[]
@@ -3,7 +3,6 @@ require "logstash/outputs/base"
3
3
  require "logstash/namespace"
4
4
  require "thread"
5
5
  require "logstash/util/socket_peer"
6
- require "logstash/plugin_mixins/normalize_config_support"
7
6
 
8
7
  # Write events over a TCP socket.
9
8
  #
@@ -13,8 +12,6 @@ require "logstash/plugin_mixins/normalize_config_support"
13
12
  # depending on `mode`.
14
13
  class LogStash::Outputs::Tcp < LogStash::Outputs::Base
15
14
 
16
- include LogStash::PluginMixins::NormalizeConfigSupport
17
-
18
15
  config_name "tcp"
19
16
  concurrency :single
20
17
 
@@ -35,9 +32,6 @@ class LogStash::Outputs::Tcp < LogStash::Outputs::Base
35
32
  # `client` connects to a server.
36
33
  config :mode, :validate => ["server", "client"], :default => "client"
37
34
 
38
- # Enable SSL (must be set for other `ssl_` options to take effect).
39
- config :ssl_enable, :validate => :boolean, :default => false, :deprecated => "Use 'ssl_enabled' instead."
40
-
41
35
  # Enable SSL (must be set for other `ssl_` options to take effect).
42
36
  config :ssl_enabled, :validate => :boolean, :default => false
43
37
 
@@ -48,10 +42,6 @@ class LogStash::Outputs::Tcp < LogStash::Outputs::Base
48
42
  # This option needs to be used with `ssl_certificate_authorities` and a defined list of CAs.
49
43
  config :ssl_client_authentication, :validate => %w[none optional required], :default => 'none'
50
44
 
51
- # Verify the identity of the other end of the SSL connection against the CA.
52
- # For input, sets the field `sslsubject` to that of the client certificate.
53
- config :ssl_verify, :validate => :boolean, :default => false, :deprecated => "Use 'ssl_client_authentication' when `mode` is 'server' or 'ssl_verification_mode' when mode is `client`"
54
-
55
45
  # Options to verify the server's certificate.
56
46
  # "full": validates that the provided certificate has an issue date that’s within the not_before and not_after dates;
57
47
  # chains to a trusted Certificate Authority (CA); has a hostname or IP address that matches the names within the certificate.
@@ -59,16 +49,11 @@ class LogStash::Outputs::Tcp < LogStash::Outputs::Base
59
49
  # "none": performs no certificate validation. Disabling this severely compromises security (https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf)
60
50
  config :ssl_verification_mode, :validate => %w[full none], :default => 'full'
61
51
 
62
- # The SSL CA certificate, chainfile or CA path. The system CA path is automatically included.
63
- config :ssl_cacert, :validate => :path, :deprecated => "Use 'ssl_certificate_authorities' instead."
64
52
 
65
53
  # Validate client certificate or certificate chain against these authorities. You can define multiple files.
66
54
  # All the certificates will be read and added to the trust store.
67
55
  config :ssl_certificate_authorities, :validate => :path, :list => true
68
56
 
69
- # SSL certificate path
70
- config :ssl_cert, :validate => :path, :deprecated => "Use 'ssl_certificate' instead."
71
-
72
57
  # SSL certificate path
73
58
  config :ssl_certificate, :validate => :path
74
59
 
@@ -84,6 +69,11 @@ class LogStash::Outputs::Tcp < LogStash::Outputs::Base
84
69
  # The list of ciphers suite to use
85
70
  config :ssl_cipher_suites, :validate => :string, :list => true
86
71
 
72
+ config :ssl_enable, :obsolete => "Use 'ssl_enabled' instead."
73
+ config :ssl_verify, :obsolete => "Use 'ssl_client_authentication' when `mode` is 'server' or 'ssl_verification_mode' when mode is `client`"
74
+ config :ssl_cacert, :obsolete => "Use 'ssl_certificate_authorities' instead."
75
+ config :ssl_cert, :obsolete => "Use 'ssl_certificate' instead."
76
+
87
77
  class Client
88
78
 
89
79
  ##
@@ -189,11 +179,6 @@ class LogStash::Outputs::Tcp < LogStash::Outputs::Base
189
179
  end
190
180
  private :load_cert_store
191
181
 
192
- def initialize(*args)
193
- super(*args)
194
- setup_ssl_params!
195
- end
196
-
197
182
  # @overload Base#register
198
183
  def register
199
184
  require "socket"
@@ -279,7 +264,7 @@ class LogStash::Outputs::Tcp < LogStash::Outputs::Base
279
264
  client_socket = nil
280
265
  @codec.on_event do |event, payload|
281
266
  begin
282
- client_socket = retryable_connect unless client_socket
267
+ client_socket = connect unless client_socket
283
268
  while payload && payload.bytesize > 0
284
269
  begin
285
270
  written_bytes_size = client_socket.write_nonblock(payload)
@@ -331,34 +316,32 @@ class LogStash::Outputs::Tcp < LogStash::Outputs::Base
331
316
  @logger.error(msg, details)
332
317
  end
333
318
 
319
+ private
320
+
334
321
  def connect
335
- client_socket = TCPSocket.new(@host, @port)
336
- if @ssl_enabled
337
- client_socket = OpenSSL::SSL::SSLSocket.new(client_socket, @ssl_context)
338
- begin
339
- client_socket.connect
340
- client_socket.post_connection_check(@host) if @ssl_verification_mode == 'full'
341
- rescue OpenSSL::SSL::SSLError => ssle
342
- log_error 'connect ssl failure:', ssle, backtrace: false
343
- client_socket.close rescue nil
344
- raise
322
+ begin
323
+ client_socket = TCPSocket.new(@host, @port)
324
+ if @ssl_enabled
325
+ client_socket = OpenSSL::SSL::SSLSocket.new(client_socket, @ssl_context)
326
+ begin
327
+ client_socket.connect
328
+ rescue OpenSSL::SSL::SSLError => ssle
329
+ log_error 'connect ssl failure:', ssle, backtrace: false
330
+ # NOTE(mrichar1): Hack to prevent hammering peer
331
+ sleep(5)
332
+ raise
333
+ end
345
334
  end
335
+ client_socket.extend(::LogStash::Util::SocketPeer)
336
+ @logger.debug("opened connection", :client => client_socket.peer)
337
+ return client_socket
338
+ rescue => e
339
+ log_error 'failed to connect:', e
340
+ sleep @reconnect_interval
341
+ retry
346
342
  end
347
- client_socket.extend(::LogStash::Util::SocketPeer)
348
- @logger.debug("opened connection", :client => client_socket.peer)
349
- client_socket
350
- end
351
-
352
- private
353
- def retryable_connect
354
- connect
355
- rescue => e
356
- log_error 'failed to connect:', e
357
- sleep @reconnect_interval
358
- retry
359
- end
343
+ end # def connect
360
344
 
361
- private
362
345
  def validate_ssl_config!
363
346
  unless @ssl_enabled
364
347
  ignored_ssl_settings = original_params.select { |k| k != 'ssl_enabled' && k != 'ssl_enable' && k.start_with?('ssl_') }
@@ -407,47 +390,6 @@ class LogStash::Outputs::Tcp < LogStash::Outputs::Base
407
390
  original_params.include?('ssl_enable') ? 'ssl_enable' : 'ssl_enabled'
408
391
  end
409
392
 
410
- def setup_ssl_params!
411
- @ssl_enabled = normalize_config(:ssl_enabled) do |normalizer|
412
- normalizer.with_deprecated_alias(:ssl_enable)
413
- end
414
-
415
- @ssl_certificate = normalize_config(:ssl_certificate) do |normalizer|
416
- normalizer.with_deprecated_alias(:ssl_cert)
417
- end
418
-
419
- if server?
420
- @ssl_client_authentication = normalize_config(:ssl_client_authentication) do |normalizer|
421
- normalizer.with_deprecated_mapping(:ssl_verify) do |ssl_verify|
422
- ssl_verify == true ? 'required' : 'none'
423
- end
424
- end
425
- else
426
- @ssl_verification_mode = normalize_config(:ssl_verification_mode) do |normalize|
427
- normalize.with_deprecated_mapping(:ssl_verify) do |ssl_verify|
428
- ssl_verify == true ? 'full' : 'none'
429
- end
430
- end
431
-
432
- # Keep backwards compatibility with the default :ssl_verify value (false)
433
- if !original_params.include?('ssl_verify') && !original_params.include?('ssl_verification_mode')
434
- @ssl_verification_mode = 'none'
435
- end
436
- end
437
-
438
- @ssl_certificate_authorities = normalize_config(:ssl_certificate_authorities) do |normalize|
439
- normalize.with_deprecated_mapping(:ssl_cacert) do |ssl_cacert|
440
- if File.directory?(ssl_cacert)
441
- Dir.children(ssl_cacert)
442
- .map{ |f| File.join(ssl_cacert, f) }
443
- .reject{ |f| File.directory?(f) || File.basename(f).start_with?('.') }
444
- else
445
- [ssl_cacert]
446
- end
447
- end
448
- end
449
- end
450
-
451
393
  def server?
452
394
  @mode == "server"
453
395
  end # def server?
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-output-tcp'
4
- s.version = '6.2.2'
4
+ s.version = '7.0.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Writes events over a TCP socket"
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -24,7 +24,6 @@ Gem::Specification.new do |s|
24
24
  s.add_runtime_dependency 'logstash-core', '>= 8.1.0'
25
25
  s.add_runtime_dependency 'logstash-codec-json'
26
26
  s.add_runtime_dependency 'stud'
27
- s.add_runtime_dependency 'logstash-mixin-normalize_config_support', '~>1.0'
28
27
 
29
28
  s.add_runtime_dependency 'jruby-openssl', '>= 0.12.2' # 0.12 supports TLSv1.3
30
29
 
@@ -1,29 +1,19 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- R9deha5fqAELge9o1dZ4lwvHPCsRO3peNSbQCVXSPSRNw/iQITrL/VM2qT88bJd9
21
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- QZ7qExJbYJ7UU9gzNG2rHE/e1OM4OL+W70t44QgNiynQCVfhC+XTAmjF0NZn
2
+ MIIDIjCCAgqgAwIBAgIUTCjyocBgCYSWU/GYI58F0IBXLHswDQYJKoZIhvcNAQEL
3
+ BQAwNDEyMDAGA1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5l
4
+ cmF0ZWQgQ0EwHhcNMjIwMzIxMDc1NTU2WhcNMjUwMzIwMDc1NTU2WjATMREwDwYD
5
+ VQQDEwhpbnN0YW5jZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJKT
6
+ f0FF/R9WBC7lwN0IJdOn+jPJJ+4M3LY/sfFuTaAUgPSaiRLLzCjox1p1Xy9z+xyk
7
+ C2Dkhb4FdOZBNqS/w0Z7lkrha8VZg2UKW4+i1lq4ANPl9sP9YCbh1R+SRdpHnZX7
8
+ APG798+0+NC4GmEeOIFfWsEE4MiFXAPunhAlAbxMl6e5htX4cgYWMbH67Ur1/uQB
9
+ 26Y6PBahKP7dbxaL/ugPE6MDmmA+cNRWMa21Ay2h94IesRXwNRFn1gQ1SqKU0hBJ
10
+ KX7u0IoYyS6nbDlF6E+npLLWzDMCHsykrnadWV5kDSNv1t7Wvk0noNStrryOXgtc
11
+ 7iCCOX1oqsP/yDNl9OECAwEAAaNNMEswHQYDVR0OBBYEFBtzuCJPEhHW3ZD1bReq
12
+ S6K3P09OMB8GA1UdIwQYMBaAFJcC1Mw29qzRV0dPCCc6GyB8LXx3MAkGA1UdEwQC
13
+ MAAwDQYJKoZIhvcNAQELBQADggEBAHvXsfMgY+PTBCnW3A6QCGZ3jTSRqqXRFYB8
14
+ b/unfhD4iUFlgO4a/UCL2MTsFYXkzvlzwQyH6ll9/rTslBvJLiqi3+IZMfGNoaNI
15
+ LhTLy0NF9scPju7Q6MxcPAceI4gmxKyBWJxm4XYJ1VwmPKJNzKqFEwfPWMakxUaT
16
+ wiuhVodqZweWi7S2keYiduBLEbqWBJPKAnb8e3PIILBqL0nfhmVw0NSAD19d9oLR
17
+ 89AaY8zQ4YL4Txs4FSrK0VQl3L6NAtAaq9JvXqzXD/E0EO1YL8ykM3Zash/GG9iN
18
+ B9Momegqn8/q7pfoWdkE2oL9KUKispUT9Fq3mY6KHZL1T4SbxL8=
29
19
  -----END CERTIFICATE-----
@@ -1,54 +1,30 @@
1
1
  -----BEGIN RSA PRIVATE KEY-----
2
2
  Proc-Type: 4,ENCRYPTED
3
- DEK-Info: AES-128-CBC,4E027532A0DE587AFF949BA191AB0BC1
3
+ DEK-Info: AES-128-CBC,635374A0A566A0189BE4366E77881457
4
4
 
5
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 3Ko5HwTOZDwF8IRqZL8x18T5Oz1IWKNadIwcttZHRspgiIsXcQmOnaIcS0ckHgNy
21
- ec0eEvXIMriOJXIJb9AIvtX0ge8XU39hnfCq5nl2ea/RPxiuviwnb1KIjtKWliXz
22
- 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
- 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
- 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
- qPAFQUiJtF9pmNwBMSFe7bMyRNDiqW9VLu7epNyR/HzuW1rSIgUloWVM+mC5YAs8
26
- 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
- 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
- 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
- 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
- 3i05KM0+TBEZc5MIVUNoh6DHqdDaG+oLgEBXFMInwFhOxDVHgFYSwaJVi/NXKji2
31
- WFksoApn/PHo0/Q3vlCSpnHiScugLkvsRJGhjgL6MB0g2LvMxd8SJaIS+ls4cYZB
32
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 6jKP2yvUZMJjfFOOh7TpJdY6CTYRBwCoOSA8DbBYSgbfmpR8s2ldtG6zzbZt4dxI
52
- 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
- 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
54
30
  -----END RSA PRIVATE KEY-----
@@ -1,29 +1,19 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- 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
- 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
- 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
- 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
- 9zbeGPYzs5PDA8kc8slWHsXuItjsRe5aPwtXjgmySpdQJN+RafO+F5r2nDnNftPs
7
- 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
- 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
- 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
- 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
- cyunucN5zSjRYkRY0otsMOIFAfLumZJBOOJz2J1PkyfE1u38tHTBQ/EGFB/T60IN
12
- 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
- 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
- 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
- Ol2lx/UceoY89qoLBsTcD3Gdq4hKP5opEpsOPrTQA52Os01pEEJx4oB8tkLC00EC
16
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
29
19
  -----END CERTIFICATE-----
@@ -1,52 +1,27 @@
1
- -----BEGIN PRIVATE KEY-----
2
- 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
- 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
- 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
- CiOi4/FIqxWaV21A43BLpo4nf3uI9gd3Xt6iqUq1BsJLCg0VOP5CQB5lG1u7DJ+7
6
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- XpCmbmA0BUDkUkLYFsHwBCEfmYXKM2ue5XB/nbqqK/UX7DrlrJSCh5eL8hpvWXEI
21
- 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
- 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
- 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
- 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
- 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
- xiCaCgP6gALyVhxtQGQsL+05DuaDQ8Vo3Z0J4kUoCbYPnLAmYNI5FZ0GTrHOi9JD
27
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- UDyijB7zAxsjlBhPfJ3zQORe2jEF7ffWWMJCQhuzqx7OFwPBnHa1J0pj6SPR01Jp
37
- 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
- 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
- gPkDTTQYwRuLOyF3WmurNYBPz+BEsLxsy8daoPs4B0wvcqdc7AJwIRcmIpgsytcz
40
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
51
- o22D2dsjujfyKKiKar1g0pjn2ouLyGI=
52
- -----END PRIVATE KEY-----
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEAjSyxg8ZZ5xrRgwhUBPGcQD/5YUv95ZZxtpfkl5okD6DpbEyz
3
+ YHoUQx9pLFq4asdkla1g0/WzSmm3MkQ8BnLHdOS/yg21JqLeuk6hxjd5sT9JZeVB
4
+ 3vEda/L7DmWzUtEcg1SkScxmGN0epcWMiKmawBeKHNT8GseRYZ911yjzxi5oyC1Z
5
+ ssipCv+gfJ3YXoqBBvIc9IPfmEJi8tCIcRju8ie0DoD2ZhJ1tmDRm8j5AYS9maFh
6
+ dmMo7LtV+DynXOZ9sidd110I6QGnmBcO7xpHGKBpACLdj4RKdU/EOvrb5UTMJ2Z3
7
+ 88JbxuUd+8T1tOCqNiaAfTU8CipB7CS7FyW58QIDAQABAoIBAD10dD4J7X72JLgm
8
+ uvR//OXXM4cQXpFAAXZb/s2j8wi+on5bkUZxPjrOBKmjQF5zOC0UEW+TqJ2/EVmX
9
+ bI3eD0eqgHbDqtUL12tA6Zlw8s+e3iO2Pgt/6K/iUTm+OebWUtQ012Osz9EJCNte
10
+ +MNRGaV/WccdTDWYJIhbsx+bmyrsxxW49rwvgxI26tpJYp0QEmwEiDqfc8kRFWgy
11
+ xVSt8Rjwk418YdsYUIGrO6RsGkwsCOTJWUJpBOzLBKwj4do5l5fC2g1/MSlj7Odj
12
+ 0HH/riBmzBj/YcyMlkhfGU0Zj/OlDnz8FP5HhfpYsGxvrjOYJ49Cl4cu8r47wnFP
13
+ nx4RMmUCgYEA4U9hOtp8oJ+Ztio/1I6bAb/hKLJ3LNeV46697/lTy6tSVmYJ1DGJ
14
+ YU3P5wmOpjZC2xs22VyX/vgC1v5RT0Jg8CGgXukmMV1gQQch6gAQci9+ZJ4LRz9U
15
+ ++dXyKuUbqncx9ezFwddBr+jQuu6Wn2AHljEp7wZGaijxD2lsp4B8vcCgYEAoGd8
16
+ w+hre2pGy5PKJPSoPp+9tNVJasXe3DM6ZYEZkd+96gStA+8UlSYe9hP+Taik7oUJ
17
+ SYzELfyU8s+9XWozaa1T5PeyY8jIbEnUHWy8Uag4dHY7ooR+7b3iAD4RLfx3o2GP
18
+ vJwP3i2FwklDbbyugVXZBfkSf2NJ4QidYIWzGFcCgYAD4MHjqW8LtLOIlyGSHwI7
19
+ /Xl6ode7RdqmmJNcVgZDMyevpQH2TQP4UMaLS3bRFY4BB27iPt2+3bXuzWHI43OX
20
+ rnx8JbcqkljdxamnxWiDDp42TSIUj9p+m3S/V3Suku3h4qyKcO4A97tvo28Jr69M
21
+ 1mpMGMi10FlBP25irKWL8QKBgQCZqKlnjrWwA24QROJnpoupeiMkIRH0m9rS/Kwb
22
+ YqHZEQoALTyEwTnpaxxLxXlecYiWCZGNCLFCEG2rcQBJhZv8xxLQC8yzNDtzKQJu
23
+ saRxYQG75ytXky94lebzLoIMmIcPVz13g9TblKZHKSHT9OUCdvewdhqXN8klLrh8
24
+ J3gafwKBgQDcn/8lzfmbsKO/V9fzEbqUQJOJkwyf2adLFD+KlHM3+VAghnj70j05
25
+ 1XDkQ3LOgKrqPdC/HIGjjlkTn6vaieXltHguMg99nPpzj+LXrtN22ru2eTjjUNsD
26
+ +uB9N4kgUAR00xu60xkkOSK1TcudeL5uwejO2ul0tkDu1YGDvhXymA==
27
+ -----END RSA PRIVATE KEY-----
@@ -24,6 +24,25 @@ describe LogStash::Outputs::Tcp do
24
24
 
25
25
  let(:event) { LogStash::Event.new('message' => 'foo bar') }
26
26
 
27
+ ['server', 'client'].each do |mode|
28
+ describe "handling obsolete settings for #{mode} mode" do
29
+ [{:name => 'ssl_cert', :replacement => 'ssl_certificate', :sample_value => "certificate_path"},
30
+ {:name => 'ssl_cacert', :replacement => 'ssl_certificate_authorities', :sample_value => "certificate_path"},
31
+ {:name => 'ssl_enable', :replacement => 'ssl_enabled', :sample_value => true},
32
+ {:name => 'ssl_verify', :replacement => 'ssl_client_authentication', :sample_value => 'peer'}].each do | obsolete_setting |
33
+ context "with obsolete #{obsolete_setting[:name]}" do
34
+ let (:deprecated_config) do
35
+ config.merge({'mode' => mode, obsolete_setting[:name] => obsolete_setting[:sample_value]})
36
+ end
37
+
38
+ it "should raise a config error with the appropriate message" do
39
+ expect { LogStash::Outputs::Tcp.new(deprecated_config).register }.to raise_error LogStash::ConfigurationError, /The setting `#{obsolete_setting[:name]}` in plugin `tcp` is obsolete and is no longer available. Use '#{obsolete_setting[:replacement]}'/i
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+
27
46
  context 'failing to connect' do
28
47
 
29
48
  before { subject.register }
@@ -125,7 +144,7 @@ describe LogStash::Outputs::Tcp do
125
144
  context "client mode" do
126
145
  before { subject.register }
127
146
 
128
- let(:config) { super().merge('mode' => 'client', 'host' => 'localhost') }
147
+ let(:config) { super().merge 'mode' => 'client' }
129
148
 
130
149
  it 'writes payload data' do
131
150
  Thread.start { sleep 0.25; subject.receive event }
@@ -214,7 +233,7 @@ describe LogStash::Outputs::Tcp do
214
233
 
215
234
  context 'with supported protocol' do
216
235
 
217
- let(:config) { super().merge("ssl_supported_protocols" => ['TLSv1.2']) }
236
+ let(:config) { super().merge("ssl_supported_protocols" => ['TLSv1.2'], "ssl_verification_mode" => "none") }
218
237
 
219
238
  let(:server_min_version) { 'TLS1_2' }
220
239
 
@@ -229,48 +248,11 @@ describe LogStash::Outputs::Tcp do
229
248
  expect( read ).to end_with 'foo bar'
230
249
  end
231
250
 
232
- context 'with ssl_verification_mode => full' do
233
- let(:config) do
234
- {
235
- "mode" => "client",
236
- "host" => "localhost",
237
- "port" => port,
238
- "ssl_enabled" => true,
239
- "ssl_certificate_authorities" => crt_file,
240
- "ssl_verification_mode" => "full",
241
- "codec" => "plain"
242
- }
243
- end
244
-
245
- context "with right host name" do
246
- let(:config) { super().merge("host" => "localhost") }
247
- it 'reads plain data' do
248
- thread = Thread.start { sleep 0.25; subject.receive event }
249
- socket = secure_server.accept
250
- read = socket.sysread(100)
251
- expect( read.size ).to be > 0
252
- expect( read ).to end_with 'foo bar'
253
- end
254
- end
255
-
256
- context "with wrong host name" do
257
- let(:config) { super().merge("host" => "127.0.0.1") }
258
- it 'closes the connection' do
259
- thread = Thread.start do
260
- sleep 0.25
261
- expect { subject.connect }.to raise_error(OpenSSL::SSL::SSLError, /hostname "127.0.0.1" does not match the server certificate/)
262
- end
263
- secure_server.accept rescue nil # the other side will close the connection potentially causing a "Socket closed" error
264
- thread.join
265
- end
266
- end
267
- end
268
-
269
251
  end
270
252
 
271
253
  context 'with unsupported protocol (on server)' do
272
254
 
273
- let(:config) { super().merge("ssl_supported_protocols" => ['TLSv1.1'], "reconnect_interval" => 1) }
255
+ let(:config) { super().merge("ssl_supported_protocols" => ['TLSv1.1']) }
274
256
 
275
257
  let(:server_min_version) { 'TLS1_2' }
276
258
 
@@ -278,16 +260,16 @@ describe LogStash::Outputs::Tcp do
278
260
  after { secure_server.close }
279
261
 
280
262
  it 'fails (and loops retrying)' do
281
- expect(subject.logger).to receive(:error).twice.with(/connect ssl failure/i, hash_including(message: /No appropriate protocol/i)).and_call_original
282
- expect(subject.logger).to receive(:error).twice.with(/failed to connect/i, hash_including(exception: OpenSSL::SSL::SSLError)).and_call_original
263
+ expect(subject.logger).to receive(:error).with(/connect ssl failure/i, hash_including(message: /No appropriate protocol/i)).and_call_original
264
+ expect(subject.logger).to receive(:error).with(/failed to connect/i, hash_including(exception: OpenSSL::SSL::SSLError)).and_call_original
283
265
  expect(subject).to receive(:sleep).once.and_call_original
284
266
  expect(subject).to receive(:sleep).once.and_throw :TEST_DONE # to be able to abort the retry loop
285
267
 
286
268
  Thread.start { secure_server.accept rescue nil }
287
- expect { sleep 0.25; subject.receive event }.to throw_symbol(:TEST_DONE)
269
+ expect { subject.receive event }.to throw_symbol(:TEST_DONE)
288
270
  end
289
271
 
290
- end
272
+ end if LOGSTASH_VERSION > '7.0'
291
273
 
292
274
  end
293
275
 
@@ -314,7 +296,7 @@ describe LogStash::Outputs::Tcp do
314
296
  context "and protocol is TLSv1.3" do
315
297
  let(:key_file) { File.join(FIXTURES_PATH, 'plaintext/instance.key') }
316
298
  let(:crt_file) { File.join(FIXTURES_PATH, 'plaintext/instance.crt') }
317
- let(:config) { super().merge("ssl_certificate" => crt_file, "ssl_key" => key_file) }
299
+ let(:config) { super().merge("ssl_certificate" => crt_file, "ssl_key" => key_file, "ssl_verification_mode" => "none") }
318
300
 
319
301
  let(:secure_server) do
320
302
  ssl_context = OpenSSL::SSL::SSLContext.new
@@ -411,16 +393,6 @@ describe LogStash::Outputs::Tcp do
411
393
  end
412
394
  end
413
395
 
414
- context "with deprecated ssl_verify = true and no ssl_certificate_authorities" do
415
- let(:config) { super().merge(
416
- 'ssl_verify' => true,
417
- 'ssl_certificate_authorities' => []
418
- ) }
419
-
420
- it "should register without errors" do
421
- expect { subject.register }.to_not raise_error
422
- end
423
- end
424
396
 
425
397
  %w[required optional].each do |ssl_client_authentication|
426
398
  context "with ssl_client_authentication = `#{ssl_client_authentication}` and no ssl_certificate_authorities" do
@@ -446,53 +418,6 @@ describe LogStash::Outputs::Tcp do
446
418
  end
447
419
  end
448
420
 
449
- context "with deprecated settings" do
450
- let(:ssl_verify) { true }
451
- let(:certificate_path) { File.join(FIXTURES_PATH, 'plaintext/instance.crt') }
452
- let(:config) do
453
- {
454
- "host" => "127.0.0.1",
455
- "port" => port,
456
- "ssl_enable" => true,
457
- "ssl_cert" => certificate_path,
458
- "ssl_key" => File.join(FIXTURES_PATH, 'plaintext/instance.key'),
459
- "ssl_verify" => ssl_verify
460
- }
461
- end
462
-
463
- context "and mode is server" do
464
- let(:config) { super().merge("mode" => 'server') }
465
- [true, false].each do |verify|
466
- context "and ssl_verify is #{verify}" do
467
- let(:ssl_verify) { verify }
468
-
469
- it "should set new configs variables" do
470
- subject.register
471
- expect(subject.instance_variable_get(:@ssl_enabled)).to eql(true)
472
- expect(subject.instance_variable_get(:@ssl_client_authentication)).to eql(verify ? 'required' : 'none')
473
- expect(subject.instance_variable_get(:@ssl_certificate)).to eql(certificate_path)
474
- end
475
- end
476
- end
477
- end
478
-
479
- context "and mode is client" do
480
- let(:config) { super().merge("mode" => 'client') }
481
- [true, false].each do |verify|
482
- context "and ssl_verify is #{verify}" do
483
- let(:ssl_verify) { verify }
484
-
485
- it "should set new configs variables" do
486
- subject.register
487
- expect(subject.instance_variable_get(:@ssl_enabled)).to eql(true)
488
- expect(subject.instance_variable_get(:@ssl_verification_mode)).to eql(verify ? 'full' : 'none')
489
- expect(subject.instance_variable_get(:@ssl_certificate)).to eql(certificate_path)
490
- end
491
- end
492
- end
493
- end
494
- end
495
-
496
421
  context "with ssl_client_authentication" do
497
422
  let(:config) do
498
423
  super().merge 'ssl_client_authentication' => 'required'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-tcp
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.2.2
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-29 00:00:00.000000000 Z
11
+ date: 2025-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -72,20 +72,6 @@ dependencies:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
- - !ruby/object:Gem::Dependency
76
- requirement: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - "~>"
79
- - !ruby/object:Gem::Version
80
- version: '1.0'
81
- name: logstash-mixin-normalize_config_support
82
- type: :runtime
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '1.0'
89
75
  - !ruby/object:Gem::Dependency
90
76
  requirement: !ruby/object:Gem::Requirement
91
77
  requirements: