This repository has been archived by the owner on May 5, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
04-https-with-sni.ts
93 lines (78 loc) · 2.56 KB
/
04-https-with-sni.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
* Copyright 2021 Angus.Fenying <[email protected]>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// tslint:disable:no-console
import * as libsni from '../libs';
import * as HTTPS from 'https';
import * as FS from 'fs';
const CA_CERT = FS.readFileSync(`${__dirname}/../test/ca/cert.pem`);
const cm = libsni.certs.createManager();
for (const name of [
'a.local.org',
'b.local.org',
'x.local.org'
]) {
cm.use(
name,
FS.readFileSync(`${__dirname}/../test/certs/${name}/cert.pem`),
FS.readFileSync(`${__dirname}/../test/certs/${name}/key.pem`),
{
ca: [ CA_CERT ]
}
);
}
const server = HTTPS.createServer({
// eslint-disable-next-line @typescript-eslint/naming-convention
SNICallback: cm.getSNICallback(),
requestCert: false
}, function(req, resp): void {
console.info(`Server: New connection for ${req.headers['host']}.`);
resp.setHeader('Content-Length', 5);
resp.end('Hello', () => console.info('Server: Response sent.'));
});
server.listen(10443, '127.0.0.1', function(): void {
console.info('Server: started');
for (const hostname of [
'a.local.org',
'b.local.org',
'c.local.org',
'local.org',
'dddd.local.org',
'g.local.org',
'x.local.org',
'www.c.local.org'
]) {
HTTPS.request({
host: '127.0.0.1',
servername: hostname,
port: 10443,
path: '/',
method: 'GET',
ca: [ CA_CERT ]
}, (resp) => {
console.info(`Client[${hostname}]: Connected.`);
resp.on(
'data',
function(chunk: Buffer): void {
console.info(`Client[${hostname}]: Received data "${chunk.toString()}".`);
}
);
}).on('error', (e) => console.error(`Client[${hostname}]: ${e.stack}`)).end();
}
setTimeout(() => server.close(() => console.info('Server: closed')), 5000);
}).on(
'error',
(e) => console.error(`Server: ${e.toString()}`)
);