ruby-tls 2.3.0 → 2.3.1

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: b85f5f85aa66d137ff1ff2bd3894adaf81d07679
4
- data.tar.gz: e0034106218aaa3d0ecc11ff067363a364eababa
3
+ metadata.gz: f08d99c470a03da9d3932d21d4fdc896ea6cfb06
4
+ data.tar.gz: 6500436dbffa39098612cbb5de54b0e14c9344a0
5
5
  SHA512:
6
- metadata.gz: a4b103bd35d4eeb0f6e88ec95d03cdde3d282256567ac8ae6b6e2a714b8d81d16cc049475499bdca85aa4971ecfdc1f43caeafb73ef5a03509e3f93f125ac813
7
- data.tar.gz: 5b50ebc3041e80fdba1fb24bcb55e3a3fc013e22e6ce23b5bb873badff8fa23b79c2e65818955a893081963367da21bf6c266159e02300da04dc1d254d209833
6
+ metadata.gz: b97ed2ad8a534ac1516e011a7b1f3e0aca9077653bd590d303cda1775434f8e9f91bea2eabd41dd75cd227424fcdcd39be29257f5cdcafdbf2a2def8f088ad9c
7
+ data.tar.gz: 3b6cf4dde116a5728c4bb29f297415a28c22a846f4dc66efb50538fbef738473acf2d803445d8c6e92104687f4f6dac7752999af2109a69f3c7236a4a296101d
@@ -89,9 +89,6 @@ module RubyTls
89
89
  # PutCiphertext
90
90
  attach_function :BIO_write, [:bio, :buffer_in, :buffer_length], :int
91
91
 
92
- # SelectALPNCallback
93
- # TODO:: SSL_select_next_proto
94
-
95
92
  # Deconstructor
96
93
  attach_function :SSL_get_shutdown, [:ssl], :int
97
94
  attach_function :SSL_shutdown, [:ssl], :int
@@ -106,9 +103,6 @@ module RubyTls
106
103
  # r, w
107
104
  attach_function :SSL_set_bio, [:ssl, :bio, :bio], :void
108
105
 
109
- # TODO:: SSL_CTX_set_alpn_select_cb
110
- # Will have to put a try catch around these and support when available
111
-
112
106
  attach_function :SSL_set_ex_data, [:ssl, :int, :string], :int
113
107
  callback :verify_callback, [:int, :x509], :int
114
108
  attach_function :SSL_set_verify, [:ssl, :int, :verify_callback], :void
@@ -120,11 +114,33 @@ module RubyTls
120
114
  attach_function :X509_STORE_CTX_get_ex_data, [:pointer, :int], :ssl
121
115
  attach_function :PEM_write_bio_X509, [:bio, :x509], :int
122
116
 
123
-
124
117
  # SSL Context Class
125
- # Constructor
126
- attach_function :SSLv23_server_method, [], :pointer
127
- attach_function :SSLv23_client_method, [], :pointer
118
+ # OpenSSL before 1.1.0 do not have these methods
119
+ # https://www.openssl.org/docs/man1.1.0/ssl/TLSv1_2_server_method.html
120
+ begin
121
+ attach_function :TLS_server_method, [], :pointer
122
+ attach_function :TLS_client_method, [], :pointer
123
+
124
+ VERSION_SUPPORTED = true
125
+
126
+ SSL3_VERSION = 0x0300
127
+ TLS1_VERSION = 0x0301
128
+ TLS1_1_VERSION = 0x0302
129
+ TLS1_2_VERSION = 0x0303
130
+ TLS1_3_VERSION = 0x0304
131
+ TLS_MAX_VERSION = TLS1_3_VERSION
132
+ ANY_VERSION = 0
133
+ attach_function :SSL_CTX_set_min_proto_version, [:ssl_ctx, :int], :int
134
+ attach_function :SSL_CTX_set_max_proto_version, [:ssl_ctx, :int], :int
135
+ rescue FFI::NotFoundError
136
+ attach_function :SSLv23_server_method, [], :pointer
137
+ attach_function :SSLv23_client_method, [], :pointer
138
+
139
+ def self.TLS_server_method; self.SSLv23_server_method; end
140
+ def self.TLS_client_method; self.SSLv23_client_method; end
141
+
142
+ VERSION_SUPPORTED = false
143
+ end
128
144
  attach_function :SSL_CTX_new, [:pointer], :ssl_ctx
129
145
 
130
146
  attach_function :SSL_CTX_ctrl, [:ssl_ctx, :int, :ulong, :pointer], :long
@@ -176,6 +192,7 @@ module RubyTls
176
192
  attach_function :SSL_CTX_set_session_id_context, [:ssl_ctx, :string, :buffer_length], :int
177
193
  attach_function :SSL_load_client_CA_file, [:string], :pointer
178
194
  attach_function :SSL_CTX_set_client_CA_list, [:ssl_ctx, :pointer], :void
195
+ attach_function :SSL_CTX_load_verify_locations, [:ssl_ctx, :pointer], :int, :blocking => true
179
196
 
180
197
  # OpenSSL before 1.0.2 do not have these methods
181
198
  begin
@@ -342,12 +359,12 @@ keystr
342
359
  @is_server = server
343
360
 
344
361
  if @is_server
345
- @ssl_ctx = SSL.SSL_CTX_new(SSL.SSLv23_server_method)
362
+ @ssl_ctx = SSL.SSL_CTX_new(SSL.TLS_server_method)
346
363
  set_private_key(options[:private_key] || SSL::DEFAULT_PRIVATE)
347
364
  set_certificate(options[:cert_chain] || SSL::DEFAULT_CERT)
348
365
  set_client_ca(options[:client_ca])
349
366
  else
350
- @ssl_ctx = SSL.SSL_CTX_new(SSL.SSLv23_client_method)
367
+ @ssl_ctx = SSL.SSL_CTX_new(SSL.TLS_client_method)
351
368
  end
352
369
 
353
370
  SSL.SSL_CTX_set_options(@ssl_ctx, SSL::SSL_OP_ALL)
@@ -356,6 +373,12 @@ keystr
356
373
  SSL.SSL_CTX_set_cipher_list(@ssl_ctx, options[:ciphers] || CIPHERS)
357
374
  @alpn_set = false
358
375
 
376
+ version = options[:version]
377
+ if version
378
+ vresult = set_min_proto_version(version)
379
+ raise "#{version} is unsupported" unless vresult
380
+ end
381
+
359
382
  if @is_server
360
383
  SSL.SSL_CTX_sess_set_cache_size(@ssl_ctx, 128)
361
384
  SSL.SSL_CTX_set_session_id_context(@ssl_ctx, SESSION, 8)
@@ -377,6 +400,24 @@ keystr
377
400
  end
378
401
  end
379
402
 
403
+ # Version can be one of:
404
+ # :SSL3, :TLS1, :TLS1_1, :TLS1_2, :TLS1_3, :TLS_MAX
405
+ def set_min_proto_version(version)
406
+ return false unless VERSION_SUPPORTED
407
+ num = SSL.const_get("#{version}_VERSION")
408
+ SSL.SSL_CTX_set_min_proto_version(@ssl_ctx, num) == 1
409
+ rescue NameError
410
+ false
411
+ end
412
+
413
+ def set_max_proto_version(version)
414
+ return false unless VERSION_SUPPORTED
415
+ num = SSL.const_get("#{version}_VERSION")
416
+ SSL.SSL_CTX_set_max_proto_version(@ssl_ctx, num) == 1
417
+ rescue NameError
418
+ false
419
+ end
420
+
380
421
  def cleanup
381
422
  if @ssl_ctx
382
423
  SSL.SSL_CTX_free(@ssl_ctx)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyTls
4
- VERSION = '2.3.0'
4
+ VERSION = '2.3.1'
5
5
  end
@@ -4,6 +4,18 @@ describe RubyTls do
4
4
 
5
5
  describe RubyTls::SSL::Box do
6
6
 
7
+ it "fails when passed an unsupported TLS version" do
8
+ expect {
9
+ RubyTls::SSL::Box.new(false, nil, version: :TLS1_4)
10
+ }.to raise_error(/is unsupported/)
11
+ end
12
+
13
+ it "succeeds when passed a supported TLS version" do
14
+ expect {
15
+ RubyTls::SSL::Box.new(false, nil, version: :TLS1_2)
16
+ }.to raise_error(/is unsupported/)
17
+ end
18
+
7
19
  it "should be able to send and receive encrypted comms" do
8
20
  @server_data = []
9
21
  @client_data = []
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-tls
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen von Takach
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-06 00:00:00.000000000 Z
11
+ date: 2017-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi-compiler
@@ -110,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
110
  version: '0'
111
111
  requirements: []
112
112
  rubyforge_project:
113
- rubygems_version: 2.5.1
113
+ rubygems_version: 2.6.12
114
114
  signing_key:
115
115
  specification_version: 4
116
116
  summary: Abstract TLS for Ruby