Skip to content

Commit 08ac214

Browse files
davidbenevanlucas
authored andcommitted
test: revise test-tls-econnreset for OpenSSL 1.1.0
This test is testing what happens to the server if the client shuts off the connection (so the server sees ECONNRESET), but the way it does it is convoluted. It uses a static RSA key exchange with a tiny (384-bit) RSA key. The server doesn't notice (since it is static RSA, the client acts on the key first), so the client tries to encrypt a premaster and fails: rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size SSL routines:ssl3_send_client_key_exchange:bad rsa encrypt OpenSSL happens not to send an alert in this case, so we get ECONNRESET with no alert. This is quite fragile and, notably, breaks in OpenSSL 1.1.0 now that small RSA keys are rejected by libssl. Instead, test by just connecting a TCP socket and immediately closing it. PR-URL: #16130 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Rod Vagg <rod@vagg.org>
1 parent d95b608 commit 08ac214

1 file changed

Lines changed: 10 additions & 54 deletions

File tree

‎test/parallel/test-tls-econnreset.js‎

Lines changed: 10 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -25,72 +25,28 @@ if (!common.hasCrypto)
2525
common.skip('missing crypto');
2626

2727
constassert=require('assert');
28+
constfixtures=require('../common/fixtures');
29+
constnet=require('net');
2830
consttls=require('tls');
2931

30-
constcacert=
31-
`-----BEGIN CERTIFICATE-----
32-
MIIBxTCCAX8CAnXnMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAlVTMQswCQYD
33-
VQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQU3Ryb25n
34-
TG9vcCwgSW5jLjESMBAGA1UECxMJU3Ryb25nT3BzMRowGAYDVQQDExFjYS5zdHJv
35-
bmdsb29wLmNvbTAeFw0xNDAxMTcyMjE1MDdaFw00MTA2MDMyMjE1MDdaMH0xCzAJ
36-
BgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEZ
37-
MBcGA1UEChMQU3Ryb25nTG9vcCwgSW5jLjESMBAGA1UECxMJU3Ryb25nT3BzMRow
38-
GAYDVQQDExFjYS5zdHJvbmdsb29wLmNvbTBMMA0GCSqGSIb3DQEBAQUAAzsAMDgC
39-
MQDKbQ6rIR5t1q1v4Ha36jrq0IkyUohy9EYNvLnXUly1PGqxby0ILlAVJ8JawpY9
40-
AVkCAwEAATANBgkqhkiG9w0BAQUFAAMxALA1uS4CqQXRSAyYTfio5oyLGz71a+NM
41-
+0AFLBwh5AQjhGd0FcenU4OfHxyDEOJT/Q==
42-
-----END CERTIFICATE-----`;
43-
44-
constcert=
45-
`-----BEGIN CERTIFICATE-----
46-
MIIBfDCCATYCAgQaMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAlVTMQswCQYD
47-
VQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQU3Ryb25n
48-
TG9vcCwgSW5jLjESMBAGA1UECxMJU3Ryb25nT3BzMRowGAYDVQQDExFjYS5zdHJv
49-
bmdsb29wLmNvbTAeFw0xNDAxMTcyMjE1MDdaFw00MTA2MDMyMjE1MDdaMBkxFzAV
50-
BgNVBAMTDnN0cm9uZ2xvb3AuY29tMEwwDQYJKoZIhvcNAQEBBQADOwAwOAIxAMfk
51-
I0LWU15pPUwIQNMnRVhhOibi0TQmAau8FBtgwEfGK01WpfGUaJr1a41K8Uq7xwID
52-
AQABoxkwFzAVBgNVHREEDjAMhwQAAAAAhwR/AAABMA0GCSqGSIb3DQEBBQUAAzEA
53-
cGpYrhkrb7mIh9DNhV0qp7pGjqBzlHqB7KQXw2luLDp//6dyHBMexDCQznkhZKRU
54-
-----END CERTIFICATE-----`;
55-
56-
constkey=
57-
`-----BEGIN RSA PRIVATE KEY-----
58-
MIH0AgEAAjEAx+QjQtZTXmk9TAhA0ydFWGE6JuLRNCYBq7wUG2DAR8YrTVal8ZRo
59-
mvVrjUrxSrvHAgMBAAECMBCGccvSwC2r8Z9Zh1JtirQVxaL1WWpAQfmVwLe0bAgg
60-
/JWMU/6hS36TsYyZMxwswQIZAPTAfht/zDLb7Hwgu2twsS1Ra9w/yyvtlwIZANET
61-
26votwJAHK1yUrZGA5nnp5qcmQ/JUQIZAII5YV/UUZvF9D/fUplJ7puENPWNY9bN
62-
pQIZAMMwxuS3XiO7two2sQF6W+JTYyX1DPCwAQIZAOYg1TvEGT38k8e8jygv8E8w
63-
YqrWTeQFNQ==
64-
-----END RSA PRIVATE KEY-----`;
65-
66-
constca=[cert,cacert];
67-
6832
letclientError=null;
69-
letconnectError=null;
7033

71-
constserver=tls.createServer({ca: ca,cert: cert,key: key},()=>{
72-
assert.fail('should be unreachable');
73-
}).on('tlsClientError',function(err,conn){
34+
constserver=tls.createServer({
35+
cert: fixtures.readKey('agent1-cert.pem'),
36+
key: fixtures.readKey('agent1-key.pem'),
37+
},common.mustNotCall()).on('tlsClientError',function(err,conn){
7438
assert(!clientError&&conn);
7539
clientError=err;
40+
server.close();
7641
}).listen(0,function(){
77-
constoptions={
78-
ciphers: 'AES128-GCM-SHA256',
79-
port: this.address().port,
80-
ca: ca
81-
};
82-
tls.connect(options).on('error',function(err){
83-
assert(!connectError);
84-
85-
connectError=err;
42+
net.connect(this.address().port,function(){
43+
// Destroy the socket once it is connected, so the server sees ECONNRESET.
8644
this.destroy();
87-
server.close();
88-
}).write('123');
45+
}).on('error',common.mustNotCall());
8946
});
9047

9148
process.on('exit',function(){
9249
assert(clientError);
93-
assert(connectError);
9450
assert(/sockethangup/.test(clientError.message));
9551
assert(/ECONNRESET/.test(clientError.code));
9652
});

0 commit comments

Comments
 (0)