ruby-tls 2.3.0 → 2.3.1

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
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