Skip to content

Commit 60dc01c

Browse files
committed
wip: tls handshake testing
1 parent 09c7264 commit 60dc01c

File tree

2 files changed

+45
-54
lines changed

2 files changed

+45
-54
lines changed

src/config.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export type TlsConfig = {
1111

1212
type QUICConfig = {
1313
tlsConfig: TlsConfig | undefined;
14+
verifyFromPemFile: string | undefined;
1415
verifyPeer: boolean;
1516
logKeys: string | undefined;
1617
grease: boolean;
@@ -29,8 +30,9 @@ type QUICConfig = {
2930

3031
const clientDefault: QUICConfig = {
3132
tlsConfig: undefined,
33+
verifyFromPemFile: undefined,
3234
logKeys: undefined,
33-
verifyPeer: false,
35+
verifyPeer: true,
3436
grease: true,
3537
maxIdleTimeout: 5000,
3638
maxRecvUdpPayloadSize: quiche.MAX_DATAGRAM_SIZE,
@@ -53,6 +55,7 @@ const clientDefault: QUICConfig = {
5355

5456
const serverDefault: QUICConfig = {
5557
tlsConfig: undefined,
58+
verifyFromPemFile: undefined,
5659
logKeys: undefined,
5760
verifyPeer: false,
5861
grease: true,
@@ -91,6 +94,9 @@ function buildQuicheConfig(config: QUICConfig): QuicheConfig {
9194
quicheConfig.loadPrivKeyFromPemFile(config.tlsConfig.privKeyFromPemFile);
9295
}
9396
}
97+
if (config.verifyFromPemFile != null) {
98+
quicheConfig.loadVerifyLocationsFromFile(config.verifyFromPemFile);
99+
}
94100
if (config.logKeys != null) {
95101
quicheConfig.logKeys();
96102
}

tests/QUICClient.test.ts

+38-53
Original file line numberDiff line numberDiff line change
@@ -12,59 +12,7 @@ import * as errors from '@/errors';
1212
import { fc } from '@fast-check/jest';
1313
import * as tlsUtils from './tlsUtils';
1414
import * as certFixtures from './fixtures/certFixtures';
15-
16-
17-
const privKeyPem = `
18-
-----BEGIN RSA PRIVATE KEY-----
19-
MIIEogIBAAKCAQEAovJl4noV+8myMOOhG+/1kpsAvmGaiz3o3+gnAINpFiUvANWU
20-
LUhoyyeQAzCom2yOl6WEH1574Hz6jsnwB3BFDj1wcBtbjMlwYpqfkJYsRQGIrOGD
21-
VGI3PSpcBWGOdfPnREAQrp5cL1TKRSuFtyjZR2lZY4DxUAr6JEmC2aOObv7gcr1W
22-
nhdO9PnY9aXhF2aVXsThkp8izP2ET9C7OmpMdajnVVbTW4PFU5YLnKFZFY5CmnaR
23-
08QWFByxGVKDkt5c3sPvBnI0Dfc1LvfCKFJZ4CtJs7+i+O2Y2ticLwur678wvXO9
24-
OGN6CIIC2A9c4H8I8qpE+N/frYfTg/E7/j0dbQIDAQABAoIBAB99SpU21LLA6q+p
25-
/cOBXurDC6S/Bfessik7GvZtbsx5yRiXLbiGisHf1mPXbm4Cz5ecw+iwAK6EWINp
26-
oPo/BwlWdDkmAE43y4Eysm1lqA552mjWd+PByz0Fx5y+mqJOzT2SR+cG8XewIhq1
27-
63RW745uXHjvPTMju+1xS1k101u9lL0VCo5cfPpS12fLYiVtR721CayWydfABuc9
28-
Xbj38G6lw5QGipjS+r7t588dKa9APMffKZPB3q0g65TZrOd0hjvZMQMvPe5aY3SP
29-
UpLD3GhmO/0Khsl31WkZSDPkogPBq6BqvJZa/qrSQHIh9pUX6FFOTCw3ANWQutMH
30-
681LRsECgYEAz5pLp5BrMfg/ToPMaLKcpYiY//UhI+ZjUJ8aL51D8Jl4DOAUN1ge
31-
tpBKDRm0ayLOdFeok9S8CQItrAvkFyHBiRK6R1CgyXqSCdBRPsqdN74+K0DsEloU
32-
nNdXejGGijSSezBcvNYVlJC+7yKLgpC2wK36oLFEPHdNJPIC3wZBtFECgYEAyO8L
33-
/6KfVOaUJCc02vUAU8Ap6bVA5xlXD4sxI5w6FCwcHCzlAoHGsjA2aWsnxi43z41p
34-
pRR9IySUEPZxmh76Tzs9+Dthshkjrrx8CuTIky37BIzFDioqH2Ncj5+DCAly3IU4
35-
NjCMQOp+Yx5u9UZfkdcJj31+JUCBn1BdW22Z3F0CgYB9ftdW/t1eAqQ6UUAC1l4N
36-
Tuq2Z7dV3VKSDOumdtn4Gr3QgrCV2CYQ1F5/VteSoCLPf6H/Y20bwP5c7389YIF+
37-
3BxROfNIeFjJp+1FGPQ7Gzy3pvJOEbg+K4rM6h1bdHZME6sr1/qJqYpSQr60+cgP
38-
59wGwcHvD2tJ9yY3LbAQUQKBgDefZPTpMa4w/kVbzRfnxqVohrG5iTPwIdedsoan
39-
ErTO2SE7lFGzVyuwiP95uFL2LGD6Rop6N4Ho+EwRzLTbanNQdQEofwzsRKJ0buod
40-
FyEXE2vZBBu9tFdoDBF+GKm6498DyeHGYqz9vOr3W8PuLTqUCoN8O9VYHAncF1vd
41-
5T/JAoGAeWb5iqhDhkrZDSi5GreFh2zVlDanZJqQn4UpUhotO4gtKDzMqM/rxV95
42-
RZ7zsFD22yY06cXePpMOfw4qAUDZuwoZgVH5MLW3IWJPkg++nG6GfTBaHmYmXK/M
43-
uPSJlPjTsCL+dUX+7VbrfntypnVALhtX3bZo3rsQQmUci/NjDhU=
44-
-----END RSA PRIVATE KEY-----
45-
`
46-
47-
const certChainPem = `
48-
-----BEGIN CERTIFICATE-----
49-
MIIDJjCCAg6gAwIBAgIRAImdTwINUpu7qX/uYWmVT44wDQYJKoZIhvcNAQELBQAw
50-
FDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTIzMDQxMDA1MDk1OVoXDTI0MDQwOTA1
51-
MDk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC
52-
AQ8AMIIBCgKCAQEAovJl4noV+8myMOOhG+/1kpsAvmGaiz3o3+gnAINpFiUvANWU
53-
LUhoyyeQAzCom2yOl6WEH1574Hz6jsnwB3BFDj1wcBtbjMlwYpqfkJYsRQGIrOGD
54-
VGI3PSpcBWGOdfPnREAQrp5cL1TKRSuFtyjZR2lZY4DxUAr6JEmC2aOObv7gcr1W
55-
nhdO9PnY9aXhF2aVXsThkp8izP2ET9C7OmpMdajnVVbTW4PFU5YLnKFZFY5CmnaR
56-
08QWFByxGVKDkt5c3sPvBnI0Dfc1LvfCKFJZ4CtJs7+i+O2Y2ticLwur678wvXO9
57-
OGN6CIIC2A9c4H8I8qpE+N/frYfTg/E7/j0dbQIDAQABo3MwcTAOBgNVHQ8BAf8E
58-
BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBR0
59-
zbkYQmSgopJsbuNKOQV9qjYu7TAhBgNVHREEGjAYhwR/AAABhxAAAAAAAAAAAAAA
60-
AAAAAAABMA0GCSqGSIb3DQEBCwUAA4IBAQAWLolrv0NuKqhZndYLPCT3C013Qo6y
61-
QeQPbyZbJgHhRZd2feP8sEQ1U4f48OKL5ejWEKOaUvH/sVI9Jume4ve2xOxqz+ST
62-
csZqUqinnUT/12jwGOys2IIEPBnlMxBFon54G336+LGgl9CX+rXKeJZgIbmZpcCa
63-
J948KRJwJ4E4UgnNIY/e4J5nCpScA0b5GlmcvpoV5yBoIf6vvnrWeyyl4rotPx9Q
64-
jm/r7v5BQrwMjbcrLCA9Nob5tSMEHDjlvt4cNzOnMWdsjB735QaMsA8qZX8m2NpX
65-
jti9iwz2QT6q1s+PjS/gbflIO3j4FP4XOEQGtWm9iqPbVhoUIB9PBED3
66-
-----END CERTIFICATE-----
67-
`
15+
import { promise } from "@/utils";
6816

6917
const tlsArb = fc.constant(certFixtures.tlsConfigFileRSA1);
7018
// const tlsArb = tlsUtils.tlsConfigArb(tlsUtils.keyPairsArb(1));
@@ -301,6 +249,43 @@ describe(QUICClient.name, () => {
301249
await server.stop();
302250
});
303251
})
252+
describe('graceful tls handshake', () => {
253+
test('handshake succeeds', async () => {
254+
const server = new QUICServer({
255+
crypto,
256+
logger: logger.getChild(QUICServer.name),
257+
config: {
258+
tlsConfig: certFixtures.tlsConfigFileRSA1,
259+
verifyPeer: true,
260+
verifyFromPemFile: certFixtures.tlsConfigFileRSA2.certChainFromPemFile
261+
}
262+
});
263+
const handleConnectionEventProm = promise<any>()
264+
server.addEventListener('connection', handleConnectionEventProm.resolveP);
265+
await server.start({
266+
host: '127.0.0.1' as Host,
267+
});
268+
// Connection should succeed
269+
const client = await QUICClient.createQUICClient({
270+
host: '::ffff:127.0.0.1' as Host,
271+
port: server.port,
272+
localHost: '::' as Host,
273+
crypto,
274+
logger: logger.getChild(QUICClient.name),
275+
config: {
276+
verifyPeer: false,
277+
tlsConfig: certFixtures.tlsConfigFileRSA2,
278+
verifyFromPemFile: certFixtures.tlsConfigFileRSA2.certChainFromPemFile
279+
}
280+
});
281+
await handleConnectionEventProm.p
282+
await client.destroy();
283+
await server.stop();
284+
})
285+
test.todo('handshake fails validation for server')
286+
test.todo('handshake fails validation for client')
287+
test.todo('handshake fails validation for both')
288+
})
304289

305290
// test('dual stack to dual stack', async () => {
306291

0 commit comments

Comments
 (0)