@@ -1248,12 +1248,16 @@ def check_supported_protocol_versions
1248
1248
1249
1249
supported = [ ]
1250
1250
ctx_proc = proc { |ctx |
1251
+ # The default security level is 1 in OpenSSL <= 3.1, 2 in OpenSSL >= 3.2
1252
+ # In OpenSSL >= 3.0, TLS 1.1 or older is disabled at level 1
1253
+ ctx . security_level = 0
1251
1254
# Explicitly reset them to avoid influenced by OPENSSL_CONF
1252
1255
ctx . min_version = ctx . max_version = nil
1253
1256
}
1254
1257
start_server ( ctx_proc : ctx_proc , ignore_listener_error : true ) do |port |
1255
1258
possible_versions . each do |ver |
1256
1259
ctx = OpenSSL ::SSL ::SSLContext . new
1260
+ ctx . security_level = 0
1257
1261
ctx . min_version = ctx . max_version = ver
1258
1262
server_connect ( port , ctx ) { |ssl |
1259
1263
ssl . puts "abc" ; assert_equal "abc\n " , ssl . gets
@@ -1304,11 +1308,15 @@ def test_minmax_version
1304
1308
1305
1309
# Server enables a single version
1306
1310
supported . each do |ver |
1307
- ctx_proc = proc { |ctx | ctx . min_version = ctx . max_version = ver }
1311
+ ctx_proc = proc { |ctx |
1312
+ ctx . security_level = 0
1313
+ ctx . min_version = ctx . max_version = ver
1314
+ }
1308
1315
start_server ( ctx_proc : ctx_proc , ignore_listener_error : true ) { |port |
1309
1316
supported . each do |cver |
1310
1317
# Client enables a single version
1311
1318
ctx1 = OpenSSL ::SSL ::SSLContext . new
1319
+ ctx1 . security_level = 0
1312
1320
ctx1 . min_version = ctx1 . max_version = cver
1313
1321
if ver == cver
1314
1322
server_connect ( port , ctx1 ) { |ssl |
@@ -1323,6 +1331,7 @@ def test_minmax_version
1323
1331
if cver <= OpenSSL ::SSL ::TLS1_2_VERSION
1324
1332
# Client enables a single version using #ssl_version=
1325
1333
ctx2 = OpenSSL ::SSL ::SSLContext . new
1334
+ ctx2 . security_level = 0
1326
1335
ctx2 . ssl_version = vmap [ cver ] [ :method ]
1327
1336
if ver == cver
1328
1337
server_connect ( port , ctx2 ) { |ssl |
@@ -1337,6 +1346,7 @@ def test_minmax_version
1337
1346
1338
1347
# Client enables all supported versions
1339
1348
ctx3 = OpenSSL ::SSL ::SSLContext . new
1349
+ ctx3 . security_level = 0
1340
1350
ctx3 . min_version = ctx3 . max_version = nil
1341
1351
server_connect ( port , ctx3 ) { |ssl |
1342
1352
assert_equal vmap [ ver ] [ :name ] , ssl . ssl_version
@@ -1351,19 +1361,26 @@ def test_minmax_version
1351
1361
1352
1362
# Server sets min_version (earliest is disabled)
1353
1363
sver = supported [ 1 ]
1354
- ctx_proc = proc { |ctx | ctx . min_version = sver }
1364
+ ctx_proc = proc { |ctx |
1365
+ ctx . security_level = 0
1366
+ ctx . min_version = sver
1367
+ }
1355
1368
start_server ( ctx_proc : ctx_proc , ignore_listener_error : true ) { |port |
1356
1369
supported . each do |cver |
1357
1370
# Client sets min_version
1358
1371
ctx1 = OpenSSL ::SSL ::SSLContext . new
1372
+ ctx1 . security_level = 0
1359
1373
ctx1 . min_version = cver
1374
+ ctx1 . max_version = 0
1360
1375
server_connect ( port , ctx1 ) { |ssl |
1361
1376
assert_equal vmap [ supported . last ] [ :name ] , ssl . ssl_version
1362
1377
ssl . puts "abc" ; assert_equal "abc\n " , ssl . gets
1363
1378
}
1364
1379
1365
1380
# Client sets max_version
1366
1381
ctx2 = OpenSSL ::SSL ::SSLContext . new
1382
+ ctx2 . security_level = 0
1383
+ ctx2 . min_version = 0
1367
1384
ctx2 . max_version = cver
1368
1385
if cver >= sver
1369
1386
server_connect ( port , ctx2 ) { |ssl |
@@ -1378,7 +1395,11 @@ def test_minmax_version
1378
1395
1379
1396
# Server sets max_version (latest is disabled)
1380
1397
sver = supported [ -2 ]
1381
- ctx_proc = proc { |ctx | ctx . max_version = sver }
1398
+ ctx_proc = proc { |ctx |
1399
+ ctx . security_level = 0
1400
+ ctx . min_version = 0
1401
+ ctx . max_version = sver
1402
+ }
1382
1403
start_server ( ctx_proc : ctx_proc , ignore_listener_error : true ) { |port |
1383
1404
supported . each do |cver |
1384
1405
# Client sets min_version
@@ -1395,6 +1416,8 @@ def test_minmax_version
1395
1416
1396
1417
# Client sets max_version
1397
1418
ctx2 = OpenSSL ::SSL ::SSLContext . new
1419
+ ctx2 . security_level = 0
1420
+ ctx2 . min_version = 0
1398
1421
ctx2 . max_version = cver
1399
1422
server_connect ( port , ctx2 ) { |ssl |
1400
1423
if cver >= sver
@@ -1771,11 +1794,11 @@ def test_get_ephemeral_key
1771
1794
1772
1795
def test_fallback_scsv
1773
1796
supported = check_supported_protocol_versions
1774
- return unless supported . include? ( OpenSSL ::SSL ::TLS1_1_VERSION ) &&
1775
- supported . include? ( OpenSSL ::SSL ::TLS1_2_VERSION )
1797
+ unless supported . include? ( OpenSSL ::SSL ::TLS1_1_VERSION )
1798
+ omit "TLS 1.1 support is required to run this test case"
1799
+ end
1776
1800
1777
- pend "Fallback SCSV is not supported" unless \
1778
- OpenSSL ::SSL ::SSLContext . method_defined? ( :enable_fallback_scsv )
1801
+ omit "Fallback SCSV is not supported" if libressl?
1779
1802
1780
1803
start_server do |port |
1781
1804
ctx = OpenSSL ::SSL ::SSLContext . new
@@ -1786,11 +1809,15 @@ def test_fallback_scsv
1786
1809
end
1787
1810
1788
1811
ctx_proc = proc { |ctx |
1812
+ ctx . security_level = 0
1813
+ ctx . min_version = 0
1789
1814
ctx . max_version = OpenSSL ::SSL ::TLS1_1_VERSION
1790
1815
}
1791
1816
start_server ( ctx_proc : ctx_proc ) do |port |
1792
1817
ctx = OpenSSL ::SSL ::SSLContext . new
1793
1818
ctx . enable_fallback_scsv
1819
+ ctx . security_level = 0
1820
+ ctx . min_version = 0
1794
1821
ctx . max_version = OpenSSL ::SSL ::TLS1_1_VERSION
1795
1822
# Here is OK too
1796
1823
# TLS1.2 not supported, fallback to TLS1.1 and signaling the fallback
@@ -1808,11 +1835,15 @@ def test_fallback_scsv
1808
1835
# Otherwise, this test fails when using openssl 1.1.1 (or later) that supports TLS1.3.
1809
1836
# TODO: We may need another test for TLS1.3 because it seems to have a different mechanism.
1810
1837
ctx1 = OpenSSL ::SSL ::SSLContext . new
1838
+ ctx1 . security_level = 0
1839
+ ctx1 . min_version = 0
1811
1840
ctx1 . max_version = OpenSSL ::SSL ::TLS1_2_VERSION
1812
1841
s1 = OpenSSL ::SSL ::SSLSocket . new ( sock1 , ctx1 )
1813
1842
1814
1843
ctx2 = OpenSSL ::SSL ::SSLContext . new
1815
1844
ctx2 . enable_fallback_scsv
1845
+ ctx2 . security_level = 0
1846
+ ctx2 . min_version = 0
1816
1847
ctx2 . max_version = OpenSSL ::SSL ::TLS1_1_VERSION
1817
1848
s2 = OpenSSL ::SSL ::SSLSocket . new ( sock2 , ctx2 )
1818
1849
# AWS-LC has slightly different error messages in all-caps.
0 commit comments