fluent-plugin-secure-forward 0.3.1 → 0.3.2

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
  SHA1:
3
- metadata.gz: 5c76b6717bc34d045ab44d29ace650890d8b78da
4
- data.tar.gz: 757fd393711ea77e11448491aee9ecd5358af942
3
+ metadata.gz: 55415b9e94812aef780d83eb0cbb597268440e49
4
+ data.tar.gz: 131d127a374a50390413313255c48ad9842d4174
5
5
  SHA512:
6
- metadata.gz: 84e6610f4d7adf62b4918d03ed08fc60b9c374b007c32147039a3a02f3ddba16d6da3c62f5fd9c065d995a63be32f5592e21cabcd93d4d025dc40e83c62ddbfa
7
- data.tar.gz: 236b1832abe620cc711ca748aeedd7b188457d5bc2925ca25be767d187e80d2faa1a109799af2d5cccb2d9e2fc32728f41a4721bd122fcec2e51d12065765441
6
+ metadata.gz: 77c5921e2bfa43fd48a0080de09ccebc28f2f76b218efa1f8b53e09b32b8d1aed9ce4dbbf77ebb713df7c8375a231ea0a426d77b5c4843ae8e954ba8b19abb90
7
+ data.tar.gz: d09d5754ed1dded8392ee0674249ea9c1d04fd5f49d66f823539fc3e1b974eb6b9e108439f1337431e51222477a8313eaa49d892ff89079398faa7a1f7fc2833
data/README.md CHANGED
@@ -396,17 +396,18 @@ To specify keepalive timeouts, use `keepalive` configuration with seconds. SSL c
396
396
  3. (server) send HELO
397
397
  * ['HELO', options(hash)]
398
398
  * options:
399
+ * nonce: string as nonce: used for shared key digest (required, v0.3.2 or later)
399
400
  * auth: string or blank\_string (string: authentication required, and its salt is this value)
400
401
  * keepalive: bool (allowed or not)
401
402
  4. (client) send PING
402
- * ['PING', selfhostname, sharedkey\_salt, sha512\_hex(sharedkey\_salt + selfhostname + sharedkey), username || '', sha512\_hex(auth\_salt + username + password) || '']
403
+ * ['PING', selfhostname, sharedkey\_salt, sha512\_hex(sharedkey\_salt + selfhostname + nonce + sharedkey), username || '', sha512\_hex(auth\_salt + username + password) || '']
403
404
  5. (server) check PING
404
405
  * check sharedkey
405
406
  * check username / password (if required)
406
407
  * send PONG FAILURE if failed
407
408
  * ['PONG', false, 'reason of authentication failure', '', '']
408
409
  6. (server) send PONG
409
- * ['PONG', bool(authentication result), 'reason if authentication failed', selfhostname, sha512\_hex(salt + selfhostname + sharedkey)]
410
+ * ['PONG', bool(authentication result), 'reason if authentication failed', selfhostname, sha512\_hex(salt + selfhostname + nonce + sharedkey)]
410
411
  7. (client) check PONG
411
412
  * check sharedkey
412
413
  * disconnect when failed
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |gem|
3
3
  gem.name = "fluent-plugin-secure-forward"
4
- gem.version = "0.3.1"
4
+ gem.version = "0.3.2"
5
5
  gem.authors = ["TAGOMORI Satoshi"]
6
6
  gem.email = ["tagomoris@gmail.com"]
7
7
  gem.summary = %q{Fluentd input/output plugin to forward over SSL with authentications}
@@ -62,12 +62,12 @@ class Fluent::SecureForwardInput::Session
62
62
  def generate_helo
63
63
  log.debug "generating helo"
64
64
  # ['HELO', options(hash)]
65
- [ 'HELO', {'auth' => (@receiver.authentication ? @auth_key_salt : ''), 'keepalive' => @receiver.allow_keepalive } ]
65
+ [ 'HELO', {'nonce' => @shared_key_nonce, 'auth' => (@receiver.authentication ? @auth_key_salt : ''), 'keepalive' => @receiver.allow_keepalive } ]
66
66
  end
67
67
 
68
68
  def check_ping(message)
69
69
  log.debug "checking ping"
70
- # ['PING', self_hostname, shared_key\_salt, sha512\_hex(shared_key\_salt + self_hostname + shared_key),
70
+ # ['PING', self_hostname, shared_key\_salt, sha512\_hex(shared_key\_salt + self_hostname + nonce + shared_key),
71
71
  # username || '', sha512\_hex(auth\_salt + username + password) || '']
72
72
  unless message.size == 6 && message[0] == 'PING'
73
73
  return false, 'invalid ping message'
@@ -79,7 +79,7 @@ class Fluent::SecureForwardInput::Session
79
79
  else
80
80
  @receiver.shared_key
81
81
  end
82
- serverside = Digest::SHA512.new.update(shared_key_salt).update(hostname).update(shared_key).hexdigest
82
+ serverside = Digest::SHA512.new.update(shared_key_salt).update(hostname).update(@shared_key_nonce).update(shared_key).hexdigest
83
83
  if shared_key_hexdigest != serverside
84
84
  log.warn "Shared key mismatch from '#{hostname}'"
85
85
  return false, 'shared_key mismatch'
@@ -104,7 +104,7 @@ class Fluent::SecureForwardInput::Session
104
104
  def generate_pong(auth_result, reason_or_salt)
105
105
  log.debug "generating pong"
106
106
  # ['PONG', bool(authentication result), 'reason if authentication failed',
107
- # self_hostname, sha512\_hex(salt + self_hostname + sharedkey)]
107
+ # self_hostname, sha512\_hex(salt + self_hostname + nonce + sharedkey)]
108
108
  if not auth_result
109
109
  return ['PONG', false, reason_or_salt, '', '']
110
110
  end
@@ -114,7 +114,7 @@ class Fluent::SecureForwardInput::Session
114
114
  else
115
115
  @receiver.shared_key
116
116
  end
117
- shared_key_hex = Digest::SHA512.new.update(reason_or_salt).update(@receiver.self_hostname).update(shared_key).hexdigest
117
+ shared_key_hex = Digest::SHA512.new.update(reason_or_salt).update(@receiver.self_hostname).update(@shared_key_nonce).update(shared_key).hexdigest
118
118
  [ 'PONG', true, '', @receiver.self_hostname, shared_key_hex ]
119
119
  end
120
120
 
@@ -164,6 +164,7 @@ class Fluent::SecureForwardInput::Session
164
164
  return
165
165
  end
166
166
 
167
+ @shared_key_nonce = generate_salt
167
168
  @auth_key_salt = generate_salt
168
169
 
169
170
  buf = ''
@@ -130,6 +130,7 @@ class Fluent::SecureForwardOutput::Node
130
130
  return false
131
131
  end
132
132
  opts = message[1]
133
+ @shared_key_nonce = opts['nonce'] || '' # make shared_key_check failed (instead of error) if protocol version mismatch exist
133
134
  @authentication = opts['auth']
134
135
  @allow_keepalive = opts['keepalive']
135
136
  true
@@ -137,9 +138,9 @@ class Fluent::SecureForwardOutput::Node
137
138
 
138
139
  def generate_ping
139
140
  log.debug "generating ping"
140
- # ['PING', self_hostname, sharedkey\_salt, sha512\_hex(sharedkey\_salt + self_hostname + shared_key),
141
+ # ['PING', self_hostname, sharedkey\_salt, sha512\_hex(sharedkey\_salt + self_hostname + nonce + shared_key),
141
142
  # username || '', sha512\_hex(auth\_salt + username + password) || '']
142
- shared_key_hexdigest = Digest::SHA512.new.update(@shared_key_salt).update(@sender.self_hostname).update(@shared_key).hexdigest
143
+ shared_key_hexdigest = Digest::SHA512.new.update(@shared_key_salt).update(@sender.self_hostname).update(@shared_key_nonce).update(@shared_key).hexdigest
143
144
  ping = ['PING', @sender.self_hostname, @shared_key_salt, shared_key_hexdigest]
144
145
  if @authentication != ''
145
146
  password_hexdigest = Digest::SHA512.new.update(@authentication).update(@username).update(@password).hexdigest
@@ -153,7 +154,7 @@ class Fluent::SecureForwardOutput::Node
153
154
  def check_pong(message)
154
155
  log.debug "checking pong"
155
156
  # ['PONG', bool(authentication result), 'reason if authentication failed',
156
- # self_hostname, sha512\_hex(salt + self_hostname + sharedkey)]
157
+ # self_hostname, sha512\_hex(salt + self_hostname + nonce + sharedkey)]
157
158
  unless message.size == 5 && message[0] == 'PONG'
158
159
  return false, 'invalid format for PONG message'
159
160
  end
@@ -167,7 +168,7 @@ class Fluent::SecureForwardOutput::Node
167
168
  return false, 'same hostname between input and output: invalid configuration'
168
169
  end
169
170
 
170
- clientside = Digest::SHA512.new.update(@shared_key_salt).update(hostname).update(@shared_key).hexdigest
171
+ clientside = Digest::SHA512.new.update(@shared_key_salt).update(hostname).update(@shared_key_nonce).update(@shared_key).hexdigest
171
172
  unless shared_key_hexdigest == clientside
172
173
  return false, 'shared key mismatch'
173
174
  end
@@ -253,9 +254,9 @@ class Fluent::SecureForwardOutput::Node
253
254
  log.trace "set verify_mode VERIFY_PEER"
254
255
  context.verify_mode = OpenSSL::SSL::VERIFY_PEER
255
256
  if @sender.enable_strict_verification
256
- context.ca_store = OpenSSL::X509::Store.new
257
+ context.cert_store = OpenSSL::X509::Store.new
257
258
  begin
258
- context.ca_store.set_default_paths
259
+ context.cert_store.set_default_paths
259
260
  rescue OpenSSL::X509::StoreError => e
260
261
  log.warn "faild to load system default certificates", error: e
261
262
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-secure-forward
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - TAGOMORI Satoshi