nats-pure 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 44273223e517bfe16e454408baba484fb3a80d8c
4
- data.tar.gz: 2cfa6aaae35c049279ae72d637c58aeabdd7e035
2
+ SHA256:
3
+ metadata.gz: 6511a5fc9c87e5a783322e9fe0b02f66a2b36d47c1ea806208877ec2c63c6a23
4
+ data.tar.gz: bfdc75088d4a39cf5e020248664d72e3ae2cdc774a26a69fcc15ddf67727e531
5
5
  SHA512:
6
- metadata.gz: f816d3cef57c6527ceae6e7dea24ec1ffd99f097ba97a8292ae1db20e3718d417f12661471830806038d0a2018deb9844c5dc57513c0c2482c1501795edfc605
7
- data.tar.gz: 9304d8711e83748d065f9ab1eddca0528b97f11d84aaec870726d6907c51343898da7656983d402e0c6ec723b41e5246bb504896332008ba0a304bc153bd27e9
6
+ metadata.gz: 300ab49335e50800e0dc0c5971dd5b96682a7e0a5be9c9f09edf10f0a1c97a3c3f10749d1b87276cd4a709d724c8e3c627ef239a5fc49ff3cfff9f2e32ac71f7
7
+ data.tar.gz: 49a3618d2dc8ab3fd7844d4e7d98035c9fbfdb68e0f336e94437edeec0572197437cc02d14f136b006b52a641a8f588cd4abaec688f1b6252efb8e361391b9a5
@@ -148,6 +148,10 @@ module NATS
148
148
 
149
149
  # Secure TLS options
150
150
  @tls = nil
151
+
152
+ # Hostname of current server; used for when TLS host
153
+ # verification is enabled.
154
+ @hostname = nil
151
155
  end
152
156
 
153
157
  # Establishes connection to NATS
@@ -175,7 +179,16 @@ module NATS
175
179
  uris = opts[:servers] || [DEFAULT_URI]
176
180
  uris.shuffle! unless @options[:dont_randomize_servers]
177
181
  uris.each do |u|
178
- @server_pool << { :uri => u.is_a?(URI) ? u.dup : URI.parse(u) }
182
+ nats_uri = case u
183
+ when URI
184
+ u.dup
185
+ else
186
+ URI.parse(u)
187
+ end
188
+ @server_pool << {
189
+ :uri => nats_uri,
190
+ :hostname => nats_uri.host
191
+ }
179
192
  end
180
193
 
181
194
  # Check for TLS usage
@@ -196,6 +209,9 @@ module NATS
196
209
  # Connection established and now in process of sending CONNECT to NATS
197
210
  @status = CONNECTING
198
211
 
212
+ # Use the hostname from the server for TLS hostname verification.
213
+ @hostname = srv[:hostname]
214
+
199
215
  # Established TCP connection successfully so can start connect
200
216
  process_connect_init
201
217
 
@@ -507,7 +523,8 @@ module NATS
507
523
  u.password ||= @uri.password if @uri.password
508
524
  end
509
525
 
510
- srv = { :uri => u, :reconnect_attempts => 0, :discovered => true }
526
+ # NOTE: Auto discovery won't work here when TLS host verification is enabled.
527
+ srv = { :uri => u, :reconnect_attempts => 0, :discovered => true, :hostname => u.host }
511
528
  srvs << srv
512
529
  end
513
530
  end
@@ -798,11 +815,26 @@ module NATS
798
815
  else
799
816
  # Defaults
800
817
  tls_context = OpenSSL::SSL::SSLContext.new
801
- tls_context.ssl_version = :TLSv1_2
818
+
819
+ # Use the default verification options from Ruby:
820
+ # https://github.com/ruby/ruby/blob/96db72ce38b27799dd8e80ca00696e41234db6ba/ext/openssl/lib/openssl/ssl.rb#L19-L29
821
+ #
822
+ # Insecure TLS versions not supported already:
823
+ # https://github.com/ruby/openssl/commit/3e5a009966bd7f806f7180d82cf830a04be28986
824
+ #
825
+ tls_context.set_params
802
826
  end
803
827
 
804
828
  # Setup TLS connection by rewrapping the socket
805
829
  tls_socket = OpenSSL::SSL::SSLSocket.new(@io.socket, tls_context)
830
+
831
+ # Close TCP socket after closing TLS socket as well.
832
+ tls_socket.sync_close = true
833
+
834
+ # Required to enable hostname verification if Ruby runtime supports it (>= 2.4):
835
+ # https://github.com/ruby/openssl/commit/028e495734e9e6aa5dba1a2e130b08f66cf31a21
836
+ tls_socket.hostname = @hostname
837
+
806
838
  tls_socket.connect
807
839
  @io.socket = tls_socket
808
840
  when (server_using_secure_connection? and !client_using_secure_connection?)
@@ -857,6 +889,9 @@ module NATS
857
889
  @io.connect
858
890
  @stats[:reconnects] += 1
859
891
 
892
+ # Set hostname to use for TLS hostname verification
893
+ @hostname = srv[:hostname]
894
+
860
895
  # Established TCP connection successfully so can start connect
861
896
  process_connect_init
862
897
 
@@ -873,7 +908,7 @@ module NATS
873
908
  # to see whether need to take it out from rotation
874
909
  srv[:auth_required] ||= true if @server_info[:auth_required]
875
910
  server_pool << srv if can_reuse_server?(srv)
876
-
911
+
877
912
  @last_err = e
878
913
 
879
914
  # Trigger async error handler
@@ -1,7 +1,7 @@
1
1
  module NATS
2
2
  module IO
3
3
  # NOTE: These are all announced to the server on CONNECT
4
- VERSION = "0.2.4"
4
+ VERSION = "0.3.0"
5
5
  LANG = "#{RUBY_ENGINE}2".freeze
6
6
  PROTOCOL = 1
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nats-pure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Waldemar Quevedo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-30 00:00:00.000000000 Z
11
+ date: 2018-02-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: NATS is an open-source, high-performance, lightweight cloud messaging
14
14
  system.
@@ -41,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
41
  version: '0'
42
42
  requirements: []
43
43
  rubyforge_project:
44
- rubygems_version: 2.5.2
44
+ rubygems_version: 2.7.3
45
45
  signing_key:
46
46
  specification_version: 4
47
47
  summary: NATS is an open-source, high-performance, lightweight cloud messaging system.