• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# TLS (SSL)
2
3<!--introduced_in=v0.10.0-->
4
5> Stability: 2 - Stable
6
7<!-- source_link=lib/tls.js -->
8
9The `tls` module provides an implementation of the Transport Layer Security
10(TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL.
11The module can be accessed using:
12
13```js
14const tls = require('tls');
15```
16
17## TLS/SSL concepts
18
19The TLS/SSL is a public/private key infrastructure (PKI). For most common
20cases, each client and server must have a *private key*.
21
22Private keys can be generated in multiple ways. The example below illustrates
23use of the OpenSSL command-line interface to generate a 2048-bit RSA private
24key:
25
26```bash
27openssl genrsa -out ryans-key.pem 2048
28```
29
30With TLS/SSL, all servers (and some clients) must have a *certificate*.
31Certificates are *public keys* that correspond to a private key, and that are
32digitally signed either by a Certificate Authority or by the owner of the
33private key (such certificates are referred to as "self-signed"). The first
34step to obtaining a certificate is to create a *Certificate Signing Request*
35(CSR) file.
36
37The OpenSSL command-line interface can be used to generate a CSR for a private
38key:
39
40```bash
41openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem
42```
43
44Once the CSR file is generated, it can either be sent to a Certificate
45Authority for signing or used to generate a self-signed certificate.
46
47Creating a self-signed certificate using the OpenSSL command-line interface
48is illustrated in the example below:
49
50```bash
51openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem
52```
53
54Once the certificate is generated, it can be used to generate a `.pfx` or
55`.p12` file:
56
57```bash
58openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem \
59      -certfile ca-cert.pem -out ryans.pfx
60```
61
62Where:
63
64* `in`: is the signed certificate
65* `inkey`: is the associated private key
66* `certfile`: is a concatenation of all Certificate Authority (CA) certs into
67   a single file, e.g. `cat ca1-cert.pem ca2-cert.pem > ca-cert.pem`
68
69### Perfect forward secrecy
70
71<!-- type=misc -->
72
73The term _[forward secrecy][]_ or _perfect forward secrecy_ describes a feature
74of key-agreement (i.e., key-exchange) methods. That is, the server and client
75keys are used to negotiate new temporary keys that are used specifically and
76only for the current communication session. Practically, this means that even
77if the server's private key is compromised, communication can only be decrypted
78by eavesdroppers if the attacker manages to obtain the key-pair specifically
79generated for the session.
80
81Perfect forward secrecy is achieved by randomly generating a key pair for
82key-agreement on every TLS/SSL handshake (in contrast to using the same key for
83all sessions). Methods implementing this technique are called "ephemeral".
84
85Currently two methods are commonly used to achieve perfect forward secrecy (note
86the character "E" appended to the traditional abbreviations):
87
88* [DHE][]: An ephemeral version of the Diffie-Hellman key-agreement protocol.
89* [ECDHE][]: An ephemeral version of the Elliptic Curve Diffie-Hellman
90  key-agreement protocol.
91
92Ephemeral methods may have some performance drawbacks, because key generation
93is expensive.
94
95To use perfect forward secrecy using `DHE` with the `tls` module, it is required
96to generate Diffie-Hellman parameters and specify them with the `dhparam`
97option to [`tls.createSecureContext()`][]. The following illustrates the use of
98the OpenSSL command-line interface to generate such parameters:
99
100```bash
101openssl dhparam -outform PEM -out dhparam.pem 2048
102```
103
104If using perfect forward secrecy using `ECDHE`, Diffie-Hellman parameters are
105not required and a default ECDHE curve will be used. The `ecdhCurve` property
106can be used when creating a TLS Server to specify the list of names of supported
107curves to use, see [`tls.createServer()`][] for more info.
108
109Perfect forward secrecy was optional up to TLSv1.2, but it is not optional for
110TLSv1.3, because all TLSv1.3 cipher suites use ECDHE.
111
112### ALPN and SNI
113
114<!-- type=misc -->
115
116ALPN (Application-Layer Protocol Negotiation Extension) and
117SNI (Server Name Indication) are TLS handshake extensions:
118
119* ALPN: Allows the use of one TLS server for multiple protocols (HTTP, HTTP/2)
120* SNI: Allows the use of one TLS server for multiple hostnames with different
121  SSL certificates.
122
123### Pre-shared keys
124
125<!-- type=misc -->
126
127TLS-PSK support is available as an alternative to normal certificate-based
128authentication. It uses a pre-shared key instead of certificates to
129authenticate a TLS connection, providing mutual authentication.
130TLS-PSK and public key infrastructure are not mutually exclusive. Clients and
131servers can accommodate both, choosing either of them during the normal cipher
132negotiation step.
133
134TLS-PSK is only a good choice where means exist to securely share a
135key with every connecting machine, so it does not replace PKI
136(Public Key Infrastructure) for the majority of TLS uses.
137The TLS-PSK implementation in OpenSSL has seen many security flaws in
138recent years, mostly because it is used only by a minority of applications.
139Please consider all alternative solutions before switching to PSK ciphers.
140Upon generating PSK it is of critical importance to use sufficient entropy as
141discussed in [RFC 4086][]. Deriving a shared secret from a password or other
142low-entropy sources is not secure.
143
144PSK ciphers are disabled by default, and using TLS-PSK thus requires explicitly
145specifying a cipher suite with the `ciphers` option. The list of available
146ciphers can be retrieved via `openssl ciphers -v 'PSK'`. All TLS 1.3
147ciphers are eligible for PSK but currently only those that use SHA256 digest are
148supported they can be retrieved via `openssl ciphers -v -s -tls1_3 -psk`.
149
150According to the [RFC 4279][], PSK identities up to 128 bytes in length and
151PSKs up to 64 bytes in length must be supported. As of OpenSSL 1.1.0
152maximum identity size is 128 bytes, and maximum PSK length is 256 bytes.
153
154The current implementation doesn't support asynchronous PSK callbacks due to the
155limitations of the underlying OpenSSL API.
156
157### Client-initiated renegotiation attack mitigation
158
159<!-- type=misc -->
160
161The TLS protocol allows clients to renegotiate certain aspects of the TLS
162session. Unfortunately, session renegotiation requires a disproportionate amount
163of server-side resources, making it a potential vector for denial-of-service
164attacks.
165
166To mitigate the risk, renegotiation is limited to three times every ten minutes.
167An `'error'` event is emitted on the [`tls.TLSSocket`][] instance when this
168threshold is exceeded. The limits are configurable:
169
170* `tls.CLIENT_RENEG_LIMIT` {number} Specifies the number of renegotiation
171  requests. **Default:** `3`.
172* `tls.CLIENT_RENEG_WINDOW` {number} Specifies the time renegotiation window
173  in seconds. **Default:** `600` (10 minutes).
174
175The default renegotiation limits should not be modified without a full
176understanding of the implications and risks.
177
178TLSv1.3 does not support renegotiation.
179
180### Session resumption
181
182Establishing a TLS session can be relatively slow. The process can be sped
183up by saving and later reusing the session state. There are several mechanisms
184to do so, discussed here from oldest to newest (and preferred).
185
186#### Session identifiers
187
188Servers generate a unique ID for new connections and
189send it to the client. Clients and servers save the session state. When
190reconnecting, clients send the ID of their saved session state and if the server
191also has the state for that ID, it can agree to use it. Otherwise, the server
192will create a new session. See [RFC 2246][] for more information, page 23 and
19330.
194
195Resumption using session identifiers is supported by most web browsers when
196making HTTPS requests.
197
198For Node.js, clients wait for the [`'session'`][] event to get the session data,
199and provide the data to the `session` option of a subsequent [`tls.connect()`][]
200to reuse the session. Servers must
201implement handlers for the [`'newSession'`][] and [`'resumeSession'`][] events
202to save and restore the session data using the session ID as the lookup key to
203reuse sessions. To reuse sessions across load balancers or cluster workers,
204servers must use a shared session cache (such as Redis) in their session
205handlers.
206
207#### Session tickets
208
209The servers encrypt the entire session state and send it
210to the client as a "ticket". When reconnecting, the state is sent to the server
211in the initial connection. This mechanism avoids the need for server-side
212session cache. If the server doesn't use the ticket, for any reason (failure
213to decrypt it, it's too old, etc.), it will create a new session and send a new
214ticket. See [RFC 5077][] for more information.
215
216Resumption using session tickets is becoming commonly supported by many web
217browsers when making HTTPS requests.
218
219For Node.js, clients use the same APIs for resumption with session identifiers
220as for resumption with session tickets. For debugging, if
221[`tls.TLSSocket.getTLSTicket()`][] returns a value, the session data contains a
222ticket, otherwise it contains client-side session state.
223
224With TLSv1.3, be aware that multiple tickets may be sent by the server,
225resulting in multiple `'session'` events, see [`'session'`][] for more
226information.
227
228Single process servers need no specific implementation to use session tickets.
229To use session tickets across server restarts or load balancers, servers must
230all have the same ticket keys. There are three 16-byte keys internally, but the
231tls API exposes them as a single 48-byte buffer for convenience.
232
233Its possible to get the ticket keys by calling [`server.getTicketKeys()`][] on
234one server instance and then distribute them, but it is more reasonable to
235securely generate 48 bytes of secure random data and set them with the
236`ticketKeys` option of [`tls.createServer()`][]. The keys should be regularly
237regenerated and server's keys can be reset with
238[`server.setTicketKeys()`][].
239
240Session ticket keys are cryptographic keys, and they ***must be stored
241securely***. With TLS 1.2 and below, if they are compromised all sessions that
242used tickets encrypted with them can be decrypted. They should not be stored
243on disk, and they should be regenerated regularly.
244
245If clients advertise support for tickets, the server will send them. The
246server can disable tickets by supplying
247`require('constants').SSL_OP_NO_TICKET` in `secureOptions`.
248
249Both session identifiers and session tickets timeout, causing the server to
250create new sessions. The timeout can be configured with the `sessionTimeout`
251option of [`tls.createServer()`][].
252
253For all the mechanisms, when resumption fails, servers will create new sessions.
254Since failing to resume the session does not cause TLS/HTTPS connection
255failures, it is easy to not notice unnecessarily poor TLS performance. The
256OpenSSL CLI can be used to verify that servers are resuming sessions. Use the
257`-reconnect` option to `openssl s_client`, for example:
258
259```console
260$ openssl s_client -connect localhost:443 -reconnect
261```
262
263Read through the debug output. The first connection should say "New", for
264example:
265
266```text
267New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
268```
269
270Subsequent connections should say "Reused", for example:
271
272```text
273Reused, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
274```
275
276## Modifying the default TLS cipher suite
277
278Node.js is built with a default suite of enabled and disabled TLS ciphers. This
279default cipher list can be configured when building Node.js to allow
280distributions to provide their own default list.
281
282The following command can be used to show the default cipher suite:
283```console
284node -p crypto.constants.defaultCoreCipherList | tr ':' '\n'
285TLS_AES_256_GCM_SHA384
286TLS_CHACHA20_POLY1305_SHA256
287TLS_AES_128_GCM_SHA256
288ECDHE-RSA-AES128-GCM-SHA256
289ECDHE-ECDSA-AES128-GCM-SHA256
290ECDHE-RSA-AES256-GCM-SHA384
291ECDHE-ECDSA-AES256-GCM-SHA384
292DHE-RSA-AES128-GCM-SHA256
293ECDHE-RSA-AES128-SHA256
294DHE-RSA-AES128-SHA256
295ECDHE-RSA-AES256-SHA384
296DHE-RSA-AES256-SHA384
297ECDHE-RSA-AES256-SHA256
298DHE-RSA-AES256-SHA256
299HIGH
300!aNULL
301!eNULL
302!EXPORT
303!DES
304!RC4
305!MD5
306!PSK
307!SRP
308!CAMELLIA
309```
310
311This default can be replaced entirely using the [`--tls-cipher-list`][]
312command-line switch (directly, or via the [`NODE_OPTIONS`][] environment
313variable). For instance, the following makes `ECDHE-RSA-AES128-GCM-SHA256:!RC4`
314the default TLS cipher suite:
315
316```bash
317node --tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4' server.js
318
319export NODE_OPTIONS=--tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4'
320node server.js
321```
322
323The default can also be replaced on a per client or server basis using the
324`ciphers` option from [`tls.createSecureContext()`][], which is also available
325in [`tls.createServer()`][], [`tls.connect()`][], and when creating new
326[`tls.TLSSocket`][]s.
327
328The ciphers list can contain a mixture of TLSv1.3 cipher suite names, the ones
329that start with `'TLS_'`, and specifications for TLSv1.2 and below cipher
330suites. The TLSv1.2 ciphers support a legacy specification format, consult
331the OpenSSL [cipher list format][] documentation for details, but those
332specifications do *not* apply to TLSv1.3 ciphers. The TLSv1.3 suites can only
333be enabled by including their full name in the cipher list. They cannot, for
334example, be enabled or disabled by using the legacy TLSv1.2 `'EECDH'` or
335`'!EECDH'` specification.
336
337Despite the relative order of TLSv1.3 and TLSv1.2 cipher suites, the TLSv1.3
338protocol is significantly more secure than TLSv1.2, and will always be chosen
339over TLSv1.2 if the handshake indicates it is supported, and if any TLSv1.3
340cipher suites are enabled.
341
342The default cipher suite included within Node.js has been carefully
343selected to reflect current security best practices and risk mitigation.
344Changing the default cipher suite can have a significant impact on the security
345of an application. The `--tls-cipher-list` switch and `ciphers` option should by
346used only if absolutely necessary.
347
348The default cipher suite prefers GCM ciphers for [Chrome's 'modern
349cryptography' setting][] and also prefers ECDHE and DHE ciphers for perfect
350forward secrecy, while offering *some* backward compatibility.
351
352128 bit AES is preferred over 192 and 256 bit AES in light of [specific
353attacks affecting larger AES key sizes][].
354
355Old clients that rely on insecure and deprecated RC4 or DES-based ciphers
356(like Internet Explorer 6) cannot complete the handshaking process with
357the default configuration. If these clients _must_ be supported, the
358[TLS recommendations][] may offer a compatible cipher suite. For more details
359on the format, see the OpenSSL [cipher list format][] documentation.
360
361There are only 5 TLSv1.3 cipher suites:
362
363* `'TLS_AES_256_GCM_SHA384'`
364* `'TLS_CHACHA20_POLY1305_SHA256'`
365* `'TLS_AES_128_GCM_SHA256'`
366* `'TLS_AES_128_CCM_SHA256'`
367* `'TLS_AES_128_CCM_8_SHA256'`
368
369The first 3 are enabled by default. The last 2 `CCM`-based suites are supported
370by TLSv1.3 because they may be more performant on constrained systems, but they
371are not enabled by default since they offer less security.
372
373## Class: `tls.CryptoStream`
374<!-- YAML
375added: v0.3.4
376deprecated: v0.11.3
377-->
378
379> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead.
380
381The `tls.CryptoStream` class represents a stream of encrypted data. This class
382is deprecated and should no longer be used.
383
384### `cryptoStream.bytesWritten`
385<!-- YAML
386added: v0.3.4
387deprecated: v0.11.3
388-->
389
390The `cryptoStream.bytesWritten` property returns the total number of bytes
391written to the underlying socket *including* the bytes required for the
392implementation of the TLS protocol.
393
394## Class: `tls.SecurePair`
395<!-- YAML
396added: v0.3.2
397deprecated: v0.11.3
398-->
399
400> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead.
401
402Returned by [`tls.createSecurePair()`][].
403
404### Event: `'secure'`
405<!-- YAML
406added: v0.3.2
407deprecated: v0.11.3
408-->
409
410The `'secure'` event is emitted by the `SecurePair` object once a secure
411connection has been established.
412
413As with checking for the server
414[`'secureConnection'`](#tls_event_secureconnection)
415event, `pair.cleartext.authorized` should be inspected to confirm whether the
416certificate used is properly authorized.
417
418## Class: `tls.Server`
419<!-- YAML
420added: v0.3.2
421-->
422
423* Extends: {net.Server}
424
425Accepts encrypted connections using TLS or SSL.
426
427### Event: `'connection'`
428<!-- YAML
429added: v0.3.2
430-->
431
432* `socket` {stream.Duplex}
433
434This event is emitted when a new TCP stream is established, before the TLS
435handshake begins. `socket` is typically an object of type [`net.Socket`][].
436Usually users will not want to access this event.
437
438This event can also be explicitly emitted by users to inject connections
439into the TLS server. In that case, any [`Duplex`][] stream can be passed.
440
441### Event: `'keylog'`
442<!-- YAML
443added:
444 - v12.3.0
445 - v10.20.0
446-->
447
448* `line` {Buffer} Line of ASCII text, in NSS `SSLKEYLOGFILE` format.
449* `tlsSocket` {tls.TLSSocket} The `tls.TLSSocket` instance on which it was
450  generated.
451
452The `keylog` event is emitted when key material is generated or received by
453a connection to this server (typically before handshake has completed, but not
454necessarily). This keying material can be stored for debugging, as it allows
455captured TLS traffic to be decrypted. It may be emitted multiple times for
456each socket.
457
458A typical use case is to append received lines to a common text file, which
459is later used by software (such as Wireshark) to decrypt the traffic:
460
461```js
462const logFile = fs.createWriteStream('/tmp/ssl-keys.log', { flags: 'a' });
463// ...
464server.on('keylog', (line, tlsSocket) => {
465  if (tlsSocket.remoteAddress !== '...')
466    return; // Only log keys for a particular IP
467  logFile.write(line);
468});
469```
470
471### Event: `'newSession'`
472<!-- YAML
473added: v0.9.2
474changes:
475  - version: v0.11.12
476    pr-url: https://github.com/nodejs/node-v0.x-archive/pull/7118
477    description: The `callback` argument is now supported.
478-->
479
480The `'newSession'` event is emitted upon creation of a new TLS session. This may
481be used to store sessions in external storage. The data should be provided to
482the [`'resumeSession'`][] callback.
483
484The listener callback is passed three arguments when called:
485
486* `sessionId` {Buffer} The TLS session identifier
487* `sessionData` {Buffer} The TLS session data
488* `callback` {Function} A callback function taking no arguments that must be
489  invoked in order for data to be sent or received over the secure connection.
490
491Listening for this event will have an effect only on connections established
492after the addition of the event listener.
493
494### Event: `'OCSPRequest'`
495<!-- YAML
496added: v0.11.13
497-->
498
499The `'OCSPRequest'` event is emitted when the client sends a certificate status
500request. The listener callback is passed three arguments when called:
501
502* `certificate` {Buffer} The server certificate
503* `issuer` {Buffer} The issuer's certificate
504* `callback` {Function} A callback function that must be invoked to provide
505  the results of the OCSP request.
506
507The server's current certificate can be parsed to obtain the OCSP URL
508and certificate ID; after obtaining an OCSP response, `callback(null, resp)` is
509then invoked, where `resp` is a `Buffer` instance containing the OCSP response.
510Both `certificate` and `issuer` are `Buffer` DER-representations of the
511primary and issuer's certificates. These can be used to obtain the OCSP
512certificate ID and OCSP endpoint URL.
513
514Alternatively, `callback(null, null)` may be called, indicating that there was
515no OCSP response.
516
517Calling `callback(err)` will result in a `socket.destroy(err)` call.
518
519The typical flow of an OCSP Request is as follows:
520
5211. Client connects to the server and sends an `'OCSPRequest'` (via the status
522   info extension in ClientHello).
5232. Server receives the request and emits the `'OCSPRequest'` event, calling the
524   listener if registered.
5253. Server extracts the OCSP URL from either the `certificate` or `issuer` and
526   performs an [OCSP request][] to the CA.
5274. Server receives `'OCSPResponse'` from the CA and sends it back to the client
528   via the `callback` argument
5295. Client validates the response and either destroys the socket or performs a
530   handshake.
531
532The `issuer` can be `null` if the certificate is either self-signed or the
533issuer is not in the root certificates list. (An issuer may be provided
534via the `ca` option when establishing the TLS connection.)
535
536Listening for this event will have an effect only on connections established
537after the addition of the event listener.
538
539An npm module like [asn1.js][] may be used to parse the certificates.
540
541### Event: `'resumeSession'`
542<!-- YAML
543added: v0.9.2
544-->
545
546The `'resumeSession'` event is emitted when the client requests to resume a
547previous TLS session. The listener callback is passed two arguments when
548called:
549
550* `sessionId` {Buffer} The TLS session identifier
551* `callback` {Function} A callback function to be called when the prior session
552  has been recovered: `callback([err[, sessionData]])`
553  * `err` {Error}
554  * `sessionData` {Buffer}
555
556The event listener should perform a lookup in external storage for the
557`sessionData` saved by the [`'newSession'`][] event handler using the given
558`sessionId`. If found, call `callback(null, sessionData)` to resume the session.
559If not found, the session cannot be resumed. `callback()` must be called
560without `sessionData` so that the handshake can continue and a new session can
561be created. It is possible to call `callback(err)` to terminate the incoming
562connection and destroy the socket.
563
564Listening for this event will have an effect only on connections established
565after the addition of the event listener.
566
567The following illustrates resuming a TLS session:
568
569```js
570const tlsSessionStore = {};
571server.on('newSession', (id, data, cb) => {
572  tlsSessionStore[id.toString('hex')] = data;
573  cb();
574});
575server.on('resumeSession', (id, cb) => {
576  cb(null, tlsSessionStore[id.toString('hex')] || null);
577});
578```
579
580### Event: `'secureConnection'`
581<!-- YAML
582added: v0.3.2
583-->
584
585The `'secureConnection'` event is emitted after the handshaking process for a
586new connection has successfully completed. The listener callback is passed a
587single argument when called:
588
589* `tlsSocket` {tls.TLSSocket} The established TLS socket.
590
591The `tlsSocket.authorized` property is a `boolean` indicating whether the
592client has been verified by one of the supplied Certificate Authorities for the
593server. If `tlsSocket.authorized` is `false`, then `socket.authorizationError`
594is set to describe how authorization failed. Depending on the settings
595of the TLS server, unauthorized connections may still be accepted.
596
597The `tlsSocket.alpnProtocol` property is a string that contains the selected
598ALPN protocol. When ALPN has no selected protocol, `tlsSocket.alpnProtocol`
599equals `false`.
600
601The `tlsSocket.servername` property is a string containing the server name
602requested via SNI.
603
604### Event: `'tlsClientError'`
605<!-- YAML
606added: v6.0.0
607-->
608
609The `'tlsClientError'` event is emitted when an error occurs before a secure
610connection is established. The listener callback is passed two arguments when
611called:
612
613* `exception` {Error} The `Error` object describing the error
614* `tlsSocket` {tls.TLSSocket} The `tls.TLSSocket` instance from which the
615  error originated.
616
617### `server.addContext(hostname, context)`
618<!-- YAML
619added: v0.5.3
620-->
621
622* `hostname` {string} A SNI host name or wildcard (e.g. `'*'`)
623* `context` {Object} An object containing any of the possible properties
624  from the [`tls.createSecureContext()`][] `options` arguments (e.g. `key`,
625  `cert`, `ca`, etc).
626
627The `server.addContext()` method adds a secure context that will be used if
628the client request's SNI name matches the supplied `hostname` (or wildcard).
629
630### `server.address()`
631<!-- YAML
632added: v0.6.0
633-->
634
635* Returns: {Object}
636
637Returns the bound address, the address family name, and port of the
638server as reported by the operating system. See [`net.Server.address()`][] for
639more information.
640
641### `server.close([callback])`
642<!-- YAML
643added: v0.3.2
644-->
645
646* `callback` {Function} A listener callback that will be registered to listen
647  for the server instance's `'close'` event.
648* Returns: {tls.Server}
649
650The `server.close()` method stops the server from accepting new connections.
651
652This function operates asynchronously. The `'close'` event will be emitted
653when the server has no more open connections.
654
655### `server.connections`
656<!-- YAML
657added: v0.3.2
658deprecated: v0.9.7
659-->
660
661> Stability: 0 - Deprecated: Use [`server.getConnections()`][] instead.
662
663* {number}
664
665Returns the current number of concurrent connections on the server.
666
667### `server.getTicketKeys()`
668<!-- YAML
669added: v3.0.0
670-->
671
672* Returns: {Buffer} A 48-byte buffer containing the session ticket keys.
673
674Returns the session ticket keys.
675
676See [Session Resumption][] for more information.
677
678### `server.listen()`
679
680Starts the server listening for encrypted connections.
681This method is identical to [`server.listen()`][] from [`net.Server`][].
682
683### `server.setSecureContext(options)`
684<!-- YAML
685added: v11.0.0
686-->
687
688* `options` {Object} An object containing any of the possible properties from
689  the [`tls.createSecureContext()`][] `options` arguments (e.g. `key`, `cert`,
690  `ca`, etc).
691
692The `server.setSecureContext()` method replaces the secure context of an
693existing server. Existing connections to the server are not interrupted.
694
695### `server.setTicketKeys(keys)`
696<!-- YAML
697added: v3.0.0
698-->
699
700* `keys` {Buffer|TypedArray|DataView} A 48-byte buffer containing the session
701  ticket keys.
702
703Sets the session ticket keys.
704
705Changes to the ticket keys are effective only for future server connections.
706Existing or currently pending server connections will use the previous keys.
707
708See [Session Resumption][] for more information.
709
710## Class: `tls.TLSSocket`
711<!-- YAML
712added: v0.11.4
713-->
714
715* Extends: {net.Socket}
716
717Performs transparent encryption of written data and all required TLS
718negotiation.
719
720Instances of `tls.TLSSocket` implement the duplex [Stream][] interface.
721
722Methods that return TLS connection metadata (e.g.
723[`tls.TLSSocket.getPeerCertificate()`][] will only return data while the
724connection is open.
725
726### `new tls.TLSSocket(socket[, options])`
727<!-- YAML
728added: v0.11.4
729changes:
730  - version: v12.2.0
731    pr-url: https://github.com/nodejs/node/pull/27497
732    description: The `enableTrace` option is now supported.
733  - version: v5.0.0
734    pr-url: https://github.com/nodejs/node/pull/2564
735    description: ALPN options are supported now.
736-->
737
738* `socket` {net.Socket|stream.Duplex}
739  On the server side, any `Duplex` stream. On the client side, any
740  instance of [`net.Socket`][] (for generic `Duplex` stream support
741  on the client side, [`tls.connect()`][] must be used).
742* `options` {Object}
743  * `enableTrace`: See [`tls.createServer()`][]
744  * `isServer`: The SSL/TLS protocol is asymmetrical, TLSSockets must know if
745    they are to behave as a server or a client. If `true` the TLS socket will be
746    instantiated as a server. **Default:** `false`.
747  * `server` {net.Server} A [`net.Server`][] instance.
748  * `requestCert`: Whether to authenticate the remote peer by requesting a
749     certificate. Clients always request a server certificate. Servers
750     (`isServer` is true) may set `requestCert` to true to request a client
751     certificate.
752  * `rejectUnauthorized`: See [`tls.createServer()`][]
753  * `ALPNProtocols`: See [`tls.createServer()`][]
754  * `SNICallback`: See [`tls.createServer()`][]
755  * `session` {Buffer} A `Buffer` instance containing a TLS session.
756  * `requestOCSP` {boolean} If `true`, specifies that the OCSP status request
757    extension will be added to the client hello and an `'OCSPResponse'` event
758    will be emitted on the socket before establishing a secure communication
759  * `secureContext`: TLS context object created with
760    [`tls.createSecureContext()`][]. If a `secureContext` is _not_ provided, one
761    will be created by passing the entire `options` object to
762    `tls.createSecureContext()`.
763  * ...: [`tls.createSecureContext()`][] options that are used if the
764    `secureContext` option is missing. Otherwise, they are ignored.
765
766Construct a new `tls.TLSSocket` object from an existing TCP socket.
767
768### Event: `'keylog'`
769<!-- YAML
770added:
771 - v12.3.0
772 - v10.20.0
773-->
774
775* `line` {Buffer} Line of ASCII text, in NSS `SSLKEYLOGFILE` format.
776
777The `keylog` event is emitted on a `tls.TLSSocket` when key material
778is generated or received by the socket. This keying material can be stored
779for debugging, as it allows captured TLS traffic to be decrypted. It may
780be emitted multiple times, before or after the handshake completes.
781
782A typical use case is to append received lines to a common text file, which
783is later used by software (such as Wireshark) to decrypt the traffic:
784
785```js
786const logFile = fs.createWriteStream('/tmp/ssl-keys.log', { flags: 'a' });
787// ...
788tlsSocket.on('keylog', (line) => logFile.write(line));
789```
790
791### Event: `'OCSPResponse'`
792<!-- YAML
793added: v0.11.13
794-->
795
796The `'OCSPResponse'` event is emitted if the `requestOCSP` option was set
797when the `tls.TLSSocket` was created and an OCSP response has been received.
798The listener callback is passed a single argument when called:
799
800* `response` {Buffer} The server's OCSP response
801
802Typically, the `response` is a digitally signed object from the server's CA that
803contains information about server's certificate revocation status.
804
805### Event: `'secureConnect'`
806<!-- YAML
807added: v0.11.4
808-->
809
810The `'secureConnect'` event is emitted after the handshaking process for a new
811connection has successfully completed. The listener callback will be called
812regardless of whether or not the server's certificate has been authorized. It
813is the client's responsibility to check the `tlsSocket.authorized` property to
814determine if the server certificate was signed by one of the specified CAs. If
815`tlsSocket.authorized === false`, then the error can be found by examining the
816`tlsSocket.authorizationError` property. If ALPN was used, the
817`tlsSocket.alpnProtocol` property can be checked to determine the negotiated
818protocol.
819
820The `'secureConnect'` event is not emitted when a {tls.TLSSocket} is created
821using the `new tls.TLSSocket()` constructor.
822
823### Event: `'session'`
824<!-- YAML
825added: v11.10.0
826-->
827
828* `session` {Buffer}
829
830The `'session'` event is emitted on a client `tls.TLSSocket` when a new session
831or TLS ticket is available. This may or may not be before the handshake is
832complete, depending on the TLS protocol version that was negotiated. The event
833is not emitted on the server, or if a new session was not created, for example,
834when the connection was resumed. For some TLS protocol versions the event may be
835emitted multiple times, in which case all the sessions can be used for
836resumption.
837
838On the client, the `session` can be provided to the `session` option of
839[`tls.connect()`][] to resume the connection.
840
841See [Session Resumption][] for more information.
842
843For TLSv1.2 and below, [`tls.TLSSocket.getSession()`][] can be called once
844the handshake is complete. For TLSv1.3, only ticket-based resumption is allowed
845by the protocol, multiple tickets are sent, and the tickets aren't sent until
846after the handshake completes. So it is necessary to wait for the
847`'session'` event to get a resumable session. Applications
848should use the `'session'` event instead of `getSession()` to ensure
849they will work for all TLS versions. Applications that only expect to
850get or use one session should listen for this event only once:
851
852```js
853tlsSocket.once('session', (session) => {
854  // The session can be used immediately or later.
855  tls.connect({
856    session: session,
857    // Other connect options...
858  });
859});
860```
861
862### `tlsSocket.address()`
863<!-- YAML
864added: v0.11.4
865-->
866
867* Returns: {Object}
868
869Returns the bound `address`, the address `family` name, and `port` of the
870underlying socket as reported by the operating system:
871`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }`.
872
873### `tlsSocket.authorizationError`
874<!-- YAML
875added: v0.11.4
876-->
877
878Returns the reason why the peer's certificate was not been verified. This
879property is set only when `tlsSocket.authorized === false`.
880
881### `tlsSocket.authorized`
882<!-- YAML
883added: v0.11.4
884-->
885
886* Returns: {boolean}
887
888Returns `true` if the peer certificate was signed by one of the CAs specified
889when creating the `tls.TLSSocket` instance, otherwise `false`.
890
891### `tlsSocket.disableRenegotiation()`
892<!-- YAML
893added: v8.4.0
894-->
895
896Disables TLS renegotiation for this `TLSSocket` instance. Once called, attempts
897to renegotiate will trigger an `'error'` event on the `TLSSocket`.
898
899### `tlsSocket.enableTrace()`
900<!-- YAML
901added: v12.2.0
902-->
903
904When enabled, TLS packet trace information is written to `stderr`. This can be
905used to debug TLS connection problems.
906
907Note: The format of the output is identical to the output of `openssl s_client
908-trace` or `openssl s_server -trace`. While it is produced by OpenSSL's
909`SSL_trace()` function, the format is undocumented, can change without notice,
910and should not be relied on.
911
912### `tlsSocket.encrypted`
913<!-- YAML
914added: v0.11.4
915-->
916
917Always returns `true`. This may be used to distinguish TLS sockets from regular
918`net.Socket` instances.
919
920### `tlsSocket.getCertificate()`
921<!-- YAML
922added: v11.2.0
923-->
924
925* Returns: {Object}
926
927Returns an object representing the local certificate. The returned object has
928some properties corresponding to the fields of the certificate.
929
930See [`tls.TLSSocket.getPeerCertificate()`][] for an example of the certificate
931structure.
932
933If there is no local certificate, an empty object will be returned. If the
934socket has been destroyed, `null` will be returned.
935
936### `tlsSocket.getCipher()`
937<!-- YAML
938added: v0.11.4
939changes:
940  - version:
941     - v13.4.0
942     - v12.16.0
943    pr-url: https://github.com/nodejs/node/pull/30637
944    description: Return the IETF cipher name as `standardName`.
945  - version: v12.0.0
946    pr-url: https://github.com/nodejs/node/pull/26625
947    description: Return the minimum cipher version, instead of a fixed string
948      (`'TLSv1/SSLv3'`).
949-->
950
951* Returns: {Object}
952  * `name` {string} OpenSSL name for the cipher suite.
953  * `standardName` {string} IETF name for the cipher suite.
954  * `version` {string} The minimum TLS protocol version supported by this cipher
955    suite.
956
957Returns an object containing information on the negotiated cipher suite.
958
959For example:
960```json
961{
962    "name": "AES128-SHA256",
963    "standardName": "TLS_RSA_WITH_AES_128_CBC_SHA256",
964    "version": "TLSv1.2"
965}
966```
967
968See
969[SSL_CIPHER_get_name](https://www.openssl.org/docs/man1.1.1/man3/SSL_CIPHER_get_name.html)
970for more information.
971
972### `tlsSocket.getEphemeralKeyInfo()`
973<!-- YAML
974added: v5.0.0
975-->
976
977* Returns: {Object}
978
979Returns an object representing the type, name, and size of parameter of
980an ephemeral key exchange in [perfect forward secrecy][] on a client
981connection. It returns an empty object when the key exchange is not
982ephemeral. As this is only supported on a client socket; `null` is returned
983if called on a server socket. The supported types are `'DH'` and `'ECDH'`. The
984`name` property is available only when type is `'ECDH'`.
985
986For example: `{ type: 'ECDH', name: 'prime256v1', size: 256 }`.
987
988### `tlsSocket.getFinished()`
989<!-- YAML
990added: v9.9.0
991-->
992
993* Returns: {Buffer|undefined} The latest `Finished` message that has been
994  sent to the socket as part of a SSL/TLS handshake, or `undefined` if
995  no `Finished` message has been sent yet.
996
997As the `Finished` messages are message digests of the complete handshake
998(with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can
999be used for external authentication procedures when the authentication
1000provided by SSL/TLS is not desired or is not enough.
1001
1002Corresponds to the `SSL_get_finished` routine in OpenSSL and may be used
1003to implement the `tls-unique` channel binding from [RFC 5929][].
1004
1005### `tlsSocket.getPeerCertificate([detailed])`
1006<!-- YAML
1007added: v0.11.4
1008-->
1009
1010* `detailed` {boolean} Include the full certificate chain if `true`, otherwise
1011  include just the peer's certificate.
1012* Returns: {Object} A certificate object.
1013
1014Returns an object representing the peer's certificate. If the peer does not
1015provide a certificate, an empty object will be returned. If the socket has been
1016destroyed, `null` will be returned.
1017
1018If the full certificate chain was requested, each certificate will include an
1019`issuerCertificate` property containing an object representing its issuer's
1020certificate.
1021
1022#### Certificate object
1023<!-- YAML
1024changes:
1025  - version: v11.4.0
1026    pr-url: https://github.com/nodejs/node/pull/24358
1027    description: Support Elliptic Curve public key info.
1028-->
1029
1030A certificate object has properties corresponding to the fields of the
1031certificate.
1032
1033* `raw` {Buffer} The DER encoded X.509 certificate data.
1034* `subject` {Object} The certificate subject, described in terms of
1035   Country (`C:`), StateOrProvince (`ST`), Locality (`L`), Organization (`O`),
1036   OrganizationalUnit (`OU`), and CommonName (`CN`). The CommonName is typically
1037   a DNS name with TLS certificates. Example:
1038   `{C: 'UK', ST: 'BC', L: 'Metro', O: 'Node Fans', OU: 'Docs', CN: 'example.com'}`.
1039* `issuer` {Object} The certificate issuer, described in the same terms as the
1040   `subject`.
1041* `valid_from` {string} The date-time the certificate is valid from.
1042* `valid_to` {string} The date-time the certificate is valid to.
1043* `serialNumber` {string} The certificate serial number, as a hex string.
1044   Example: `'B9B0D332A1AA5635'`.
1045* `fingerprint` {string} The SHA-1 digest of the DER encoded certificate. It is
1046  returned as a `:` separated hexadecimal string. Example: `'2A:7A:C2:DD:...'`.
1047* `fingerprint256` {string} The SHA-256 digest of the DER encoded certificate.
1048   It is returned as a `:` separated hexadecimal string. Example:
1049   `'2A:7A:C2:DD:...'`.
1050* `ext_key_usage` {Array} (Optional) The extended key usage, a set of OIDs.
1051* `subjectaltname` {string} (Optional) A string containing concatenated names
1052   for the subject, an alternative to the `subject` names.
1053* `infoAccess` {Array} (Optional) An array describing the AuthorityInfoAccess,
1054   used with OCSP.
1055* `issuerCertificate` {Object} (Optional) The issuer certificate object. For
1056   self-signed certificates, this may be a circular reference.
1057
1058The certificate may contain information about the public key, depending on
1059the key type.
1060
1061For RSA keys, the following properties may be defined:
1062
1063* `bits` {number} The RSA bit size. Example: `1024`.
1064* `exponent` {string} The RSA exponent, as a string in hexadecimal number
1065  notation. Example: `'0x010001'`.
1066* `modulus` {string} The RSA modulus, as a hexadecimal string. Example:
1067   `'B56CE45CB7...'`.
1068* `pubkey` {Buffer} The public key.
1069
1070For EC keys, the following properties may be defined:
1071
1072* `pubkey` {Buffer} The public key.
1073* `bits` {number} The key size in bits. Example: `256`.
1074* `asn1Curve` {string} (Optional) The ASN.1 name of the OID of the elliptic
1075  curve. Well-known curves are identified by an OID. While it is unusual, it is
1076  possible that the curve is identified by its mathematical properties, in which
1077  case it will not have an OID. Example: `'prime256v1'`.
1078* `nistCurve` {string} (Optional) The NIST name for the elliptic curve, if it
1079  has one (not all well-known curves have been assigned names by NIST). Example:
1080  `'P-256'`.
1081
1082Example certificate:
1083
1084<!-- eslint-skip -->
1085```js
1086{ subject:
1087   { OU: [ 'Domain Control Validated', 'PositiveSSL Wildcard' ],
1088     CN: '*.nodejs.org' },
1089  issuer:
1090   { C: 'GB',
1091     ST: 'Greater Manchester',
1092     L: 'Salford',
1093     O: 'COMODO CA Limited',
1094     CN: 'COMODO RSA Domain Validation Secure Server CA' },
1095  subjectaltname: 'DNS:*.nodejs.org, DNS:nodejs.org',
1096  infoAccess:
1097   { 'CA Issuers - URI':
1098      [ 'http://crt.comodoca.com/COMODORSADomainValidationSecureServerCA.crt' ],
1099     'OCSP - URI': [ 'http://ocsp.comodoca.com' ] },
1100  modulus: 'B56CE45CB740B09A13F64AC543B712FF9EE8E4C284B542A1708A27E82A8D151CA178153E12E6DDA15BF70FFD96CB8A88618641BDFCCA03527E665B70D779C8A349A6F88FD4EF6557180BD4C98192872BCFE3AF56E863C09DDD8BC1EC58DF9D94F914F0369102B2870BECFA1348A0838C9C49BD1C20124B442477572347047506B1FCD658A80D0C44BCC16BC5C5496CFE6E4A8428EF654CD3D8972BF6E5BFAD59C93006830B5EB1056BBB38B53D1464FA6E02BFDF2FF66CD949486F0775EC43034EC2602AEFBF1703AD221DAA2A88353C3B6A688EFE8387811F645CEED7B3FE46E1F8B9F59FAD028F349B9BC14211D5830994D055EEA3D547911E07A0ADDEB8A82B9188E58720D95CD478EEC9AF1F17BE8141BE80906F1A339445A7EB5B285F68039B0F294598A7D1C0005FC22B5271B0752F58CCDEF8C8FD856FB7AE21C80B8A2CE983AE94046E53EDE4CB89F42502D31B5360771C01C80155918637490550E3F555E2EE75CC8C636DDE3633CFEDD62E91BF0F7688273694EEEBA20C2FC9F14A2A435517BC1D7373922463409AB603295CEB0BB53787A334C9CA3CA8B30005C5A62FC0715083462E00719A8FA3ED0A9828C3871360A73F8B04A4FC1E71302844E9BB9940B77E745C9D91F226D71AFCAD4B113AAF68D92B24DDB4A2136B55A1CD1ADF39605B63CB639038ED0F4C987689866743A68769CC55847E4A06D6E2E3F1',
1101  exponent: '0x10001',
1102  pubkey: <Buffer ... >,
1103  valid_from: 'Aug 14 00:00:00 2017 GMT',
1104  valid_to: 'Nov 20 23:59:59 2019 GMT',
1105  fingerprint: '01:02:59:D9:C3:D2:0D:08:F7:82:4E:44:A4:B4:53:C5:E2:3A:87:4D',
1106  fingerprint256: '69:AE:1A:6A:D4:3D:C6:C1:1B:EA:C6:23:DE:BA:2A:14:62:62:93:5C:7A:EA:06:41:9B:0B:BC:87:CE:48:4E:02',
1107  ext_key_usage: [ '1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2' ],
1108  serialNumber: '66593D57F20CBC573E433381B5FEC280',
1109  raw: <Buffer ... > }
1110```
1111
1112### `tlsSocket.getPeerFinished()`
1113<!-- YAML
1114added: v9.9.0
1115-->
1116
1117* Returns: {Buffer|undefined} The latest `Finished` message that is expected
1118  or has actually been received from the socket as part of a SSL/TLS handshake,
1119  or `undefined` if there is no `Finished` message so far.
1120
1121As the `Finished` messages are message digests of the complete handshake
1122(with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can
1123be used for external authentication procedures when the authentication
1124provided by SSL/TLS is not desired or is not enough.
1125
1126Corresponds to the `SSL_get_peer_finished` routine in OpenSSL and may be used
1127to implement the `tls-unique` channel binding from [RFC 5929][].
1128
1129### `tlsSocket.getProtocol()`
1130<!-- YAML
1131added: v5.7.0
1132-->
1133
1134* Returns: {string|null}
1135
1136Returns a string containing the negotiated SSL/TLS protocol version of the
1137current connection. The value `'unknown'` will be returned for connected
1138sockets that have not completed the handshaking process. The value `null` will
1139be returned for server sockets or disconnected client sockets.
1140
1141Protocol versions are:
1142
1143* `'SSLv3'`
1144* `'TLSv1'`
1145* `'TLSv1.1'`
1146* `'TLSv1.2'`
1147* `'TLSv1.3'`
1148
1149See the OpenSSL [`SSL_get_version`][] documentation for more information.
1150
1151### `tlsSocket.getSession()`
1152<!-- YAML
1153added: v0.11.4
1154-->
1155
1156* {Buffer}
1157
1158Returns the TLS session data or `undefined` if no session was
1159negotiated. On the client, the data can be provided to the `session` option of
1160[`tls.connect()`][] to resume the connection. On the server, it may be useful
1161for debugging.
1162
1163See [Session Resumption][] for more information.
1164
1165Note: `getSession()` works only for TLSv1.2 and below. For TLSv1.3, applications
1166must use the [`'session'`][] event (it also works for TLSv1.2 and below).
1167
1168### `tlsSocket.getSharedSigalgs()`
1169<!-- YAML
1170added: v12.11.0
1171-->
1172
1173* Returns: {Array} List of signature algorithms shared between the server and
1174  the client in the order of decreasing preference.
1175
1176See
1177[SSL_get_shared_sigalgs](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_shared_sigalgs.html)
1178for more information.
1179
1180### `tlsSocket.exportKeyingMaterial(length, label[, context])`
1181<!-- YAML
1182added: v13.10.0
1183-->
1184
1185* `length` {number} number of bytes to retrieve from keying material
1186* `label` {string} an application specific label, typically this will be a
1187  value from the
1188  [IANA Exporter Label Registry](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels).
1189* `context` {Buffer} Optionally provide a context.
1190
1191* Returns: {Buffer} requested bytes of the keying material
1192
1193Keying material is used for validations to prevent different kind of attacks in
1194network protocols, for example in the specifications of IEEE 802.1X.
1195
1196Example
1197
1198```js
1199const keyingMaterial = tlsSocket.exportKeyingMaterial(
1200  128,
1201  'client finished');
1202
1203/**
1204 Example return value of keyingMaterial:
1205 <Buffer 76 26 af 99 c5 56 8e 42 09 91 ef 9f 93 cb ad 6c 7b 65 f8 53 f1 d8 d9
1206    12 5a 33 b8 b5 25 df 7b 37 9f e0 e2 4f b8 67 83 a3 2f cd 5d 41 42 4c 91
1207    74 ef 2c ... 78 more bytes>
1208*/
1209```
1210See the OpenSSL [`SSL_export_keying_material`][] documentation for more
1211information.
1212
1213### `tlsSocket.getTLSTicket()`
1214<!-- YAML
1215added: v0.11.4
1216-->
1217
1218* {Buffer}
1219
1220For a client, returns the TLS session ticket if one is available, or
1221`undefined`. For a server, always returns `undefined`.
1222
1223It may be useful for debugging.
1224
1225See [Session Resumption][] for more information.
1226
1227### `tlsSocket.isSessionReused()`
1228<!-- YAML
1229added: v0.5.6
1230-->
1231
1232* Returns: {boolean} `true` if the session was reused, `false` otherwise.
1233
1234See [Session Resumption][] for more information.
1235
1236### `tlsSocket.localAddress`
1237<!-- YAML
1238added: v0.11.4
1239-->
1240
1241* {string}
1242
1243Returns the string representation of the local IP address.
1244
1245### `tlsSocket.localPort`
1246<!-- YAML
1247added: v0.11.4
1248-->
1249
1250* {number}
1251
1252Returns the numeric representation of the local port.
1253
1254### `tlsSocket.remoteAddress`
1255<!-- YAML
1256added: v0.11.4
1257-->
1258
1259* {string}
1260
1261Returns the string representation of the remote IP address. For example,
1262`'74.125.127.100'` or `'2001:4860:a005::68'`.
1263
1264### `tlsSocket.remoteFamily`
1265<!-- YAML
1266added: v0.11.4
1267-->
1268
1269* {string}
1270
1271Returns the string representation of the remote IP family. `'IPv4'` or `'IPv6'`.
1272
1273### `tlsSocket.remotePort`
1274<!-- YAML
1275added: v0.11.4
1276-->
1277
1278* {number}
1279
1280Returns the numeric representation of the remote port. For example, `443`.
1281
1282### `tlsSocket.renegotiate(options, callback)`
1283<!-- YAML
1284added: v0.11.8
1285-->
1286
1287* `options` {Object}
1288  * `rejectUnauthorized` {boolean} If not `false`, the server certificate is
1289    verified against the list of supplied CAs. An `'error'` event is emitted if
1290    verification fails; `err.code` contains the OpenSSL error code. **Default:**
1291    `true`.
1292  * `requestCert`
1293* `callback` {Function} If `renegotiate()` returned `true`, callback is
1294   attached once to the `'secure'` event. If `renegotiate()` returned `false`,
1295   `callback` will be called in the next tick with an error, unless the
1296   `tlsSocket` has been destroyed, in which case `callback` will not be called
1297   at all.
1298
1299* Returns: {boolean} `true` if renegotiation was initiated, `false` otherwise.
1300
1301The `tlsSocket.renegotiate()` method initiates a TLS renegotiation process.
1302Upon completion, the `callback` function will be passed a single argument
1303that is either an `Error` (if the request failed) or `null`.
1304
1305This method can be used to request a peer's certificate after the secure
1306connection has been established.
1307
1308When running as the server, the socket will be destroyed with an error after
1309`handshakeTimeout` timeout.
1310
1311For TLSv1.3, renegotiation cannot be initiated, it is not supported by the
1312protocol.
1313
1314### `tlsSocket.setMaxSendFragment(size)`
1315<!-- YAML
1316added: v0.11.11
1317-->
1318
1319* `size` {number} The maximum TLS fragment size. The maximum value is `16384`.
1320  **Default:** `16384`.
1321* Returns: {boolean}
1322
1323The `tlsSocket.setMaxSendFragment()` method sets the maximum TLS fragment size.
1324Returns `true` if setting the limit succeeded; `false` otherwise.
1325
1326Smaller fragment sizes decrease the buffering latency on the client: larger
1327fragments are buffered by the TLS layer until the entire fragment is received
1328and its integrity is verified; large fragments can span multiple roundtrips
1329and their processing can be delayed due to packet loss or reordering. However,
1330smaller fragments add extra TLS framing bytes and CPU overhead, which may
1331decrease overall server throughput.
1332
1333## `tls.checkServerIdentity(hostname, cert)`
1334<!-- YAML
1335added: v0.8.4
1336changes:
1337  - version: v14.18.3
1338    pr-url: https://github.com/nodejs-private/node-private/pull/300
1339    description: Support for `uniformResourceIdentifier` subject alternative
1340                 names has been disabled in response to CVE-2021-44531.
1341-->
1342
1343* `hostname` {string} The host name or IP address to verify the certificate
1344  against.
1345* `cert` {Object} A [certificate object][] representing the peer's certificate.
1346* Returns: {Error|undefined}
1347
1348Verifies the certificate `cert` is issued to `hostname`.
1349
1350Returns {Error} object, populating it with `reason`, `host`, and `cert` on
1351failure. On success, returns {undefined}.
1352
1353This function can be overwritten by providing alternative function as part of
1354the `options.checkServerIdentity` option passed to `tls.connect()`. The
1355overwriting function can call `tls.checkServerIdentity()` of course, to augment
1356the checks done with additional verification.
1357
1358This function is only called if the certificate passed all other checks, such as
1359being issued by trusted CA (`options.ca`).
1360
1361Earlier versions of Node.js incorrectly accepted certificates for a given
1362`hostname` if a matching `uniformResourceIdentifier` subject alternative name
1363was present (see [CVE-2021-44531][]). Applications that wish to accept
1364`uniformResourceIdentifier` subject alternative names can use a custom
1365`options.checkServerIdentity` function that implements the desired behavior.
1366
1367## `tls.connect(options[, callback])`
1368<!-- YAML
1369added: v0.11.3
1370changes:
1371  - version: v14.18.0
1372    pr-url: https://github.com/nodejs/node/pull/35753
1373    description: Added `onread` option.
1374  - version: v14.1.0
1375    pr-url: https://github.com/nodejs/node/pull/32786
1376    description: The `highWaterMark` option is accepted now.
1377  - version:
1378     - v13.6.0
1379     - v12.16.0
1380    pr-url: https://github.com/nodejs/node/pull/23188
1381    description: The `pskCallback` option is now supported.
1382  - version: v12.9.0
1383    pr-url: https://github.com/nodejs/node/pull/27836
1384    description: Support the `allowHalfOpen` option.
1385  - version: v12.4.0
1386    pr-url: https://github.com/nodejs/node/pull/27816
1387    description: The `hints` option is now supported.
1388  - version: v12.2.0
1389    pr-url: https://github.com/nodejs/node/pull/27497
1390    description: The `enableTrace` option is now supported.
1391  - version:
1392     - v11.8.0
1393     - v10.16.0
1394    pr-url: https://github.com/nodejs/node/pull/25517
1395    description: The `timeout` option is supported now.
1396  - version: v8.0.0
1397    pr-url: https://github.com/nodejs/node/pull/12839
1398    description: The `lookup` option is supported now.
1399  - version: v8.0.0
1400    pr-url: https://github.com/nodejs/node/pull/11984
1401    description: The `ALPNProtocols` option can be a `TypedArray` or
1402     `DataView` now.
1403  - version:
1404    - v5.3.0
1405    - v4.7.0
1406    pr-url: https://github.com/nodejs/node/pull/4246
1407    description: The `secureContext` option is supported now.
1408  - version: v5.0.0
1409    pr-url: https://github.com/nodejs/node/pull/2564
1410    description: ALPN options are supported now.
1411-->
1412
1413* `options` {Object}
1414  * `enableTrace`: See [`tls.createServer()`][]
1415  * `host` {string} Host the client should connect to. **Default:**
1416    `'localhost'`.
1417  * `port` {number} Port the client should connect to.
1418  * `path` {string} Creates Unix socket connection to path. If this option is
1419    specified, `host` and `port` are ignored.
1420  * `socket` {stream.Duplex} Establish secure connection on a given socket
1421    rather than creating a new socket. Typically, this is an instance of
1422    [`net.Socket`][], but any `Duplex` stream is allowed.
1423    If this option is specified, `path`, `host` and `port` are ignored,
1424    except for certificate validation. Usually, a socket is already connected
1425    when passed to `tls.connect()`, but it can be connected later.
1426    Connection/disconnection/destruction of `socket` is the user's
1427    responsibility; calling `tls.connect()` will not cause `net.connect()` to be
1428    called.
1429  * `allowHalfOpen` {boolean} If set to `false`, then the socket will
1430    automatically end the writable side when the readable side ends. If the
1431    `socket` option is set, this option has no effect. See the `allowHalfOpen`
1432    option of [`net.Socket`][] for details. **Default:** `false`.
1433  * `rejectUnauthorized` {boolean} If not `false`, the server certificate is
1434    verified against the list of supplied CAs. An `'error'` event is emitted if
1435    verification fails; `err.code` contains the OpenSSL error code. **Default:**
1436    `true`.
1437  * `pskCallback` {Function}
1438    * hint: {string} optional message sent from the server to help client
1439      decide which identity to use during negotiation.
1440      Always `null` if TLS 1.3 is used.
1441    * Returns: {Object} in the form
1442      `{ psk: <Buffer|TypedArray|DataView>, identity: <string> }`
1443      or `null` to stop the negotiation process. `psk` must be
1444      compatible with the selected cipher's digest.
1445      `identity` must use UTF-8 encoding.
1446    When negotiating TLS-PSK (pre-shared keys), this function is called
1447    with optional identity `hint` provided by the server or `null`
1448    in case of TLS 1.3 where `hint` was removed.
1449    It will be necessary to provide a custom `tls.checkServerIdentity()`
1450    for the connection as the default one will try to check host name/IP
1451    of the server against the certificate but that's not applicable for PSK
1452    because there won't be a certificate present.
1453    More information can be found in the [RFC 4279][].
1454  * `ALPNProtocols`: {string[]|Buffer[]|TypedArray[]|DataView[]|Buffer|
1455    TypedArray|DataView}
1456    An array of strings, `Buffer`s or `TypedArray`s or `DataView`s, or a
1457    single `Buffer` or `TypedArray` or `DataView` containing the supported ALPN
1458    protocols. `Buffer`s should have the format `[len][name][len][name]...`
1459    e.g. `'\x08http/1.1\x08http/1.0'`, where the `len` byte is the length of the
1460    next protocol name. Passing an array is usually much simpler, e.g.
1461    `['http/1.1', 'http/1.0']`. Protocols earlier in the list have higher
1462    preference than those later.
1463  * `servername`: {string} Server name for the SNI (Server Name Indication) TLS
1464    extension. It is the name of the host being connected to, and must be a host
1465    name, and not an IP address. It can be used by a multi-homed server to
1466    choose the correct certificate to present to the client, see the
1467    `SNICallback` option to [`tls.createServer()`][].
1468  * `checkServerIdentity(servername, cert)` {Function} A callback function
1469    to be used (instead of the builtin `tls.checkServerIdentity()` function)
1470    when checking the server's host name (or the provided `servername` when
1471    explicitly set) against the certificate. This should return an {Error} if
1472    verification fails. The method should return `undefined` if the `servername`
1473    and `cert` are verified.
1474  * `session` {Buffer} A `Buffer` instance, containing TLS session.
1475  * `minDHSize` {number} Minimum size of the DH parameter in bits to accept a
1476    TLS connection. When a server offers a DH parameter with a size less
1477    than `minDHSize`, the TLS connection is destroyed and an error is thrown.
1478    **Default:** `1024`.
1479  * `highWaterMark`: {number} Consistent with the readable stream `highWaterMark` parameter.
1480    **Default:** `16 * 1024`.
1481  * `secureContext`: TLS context object created with
1482    [`tls.createSecureContext()`][]. If a `secureContext` is _not_ provided, one
1483    will be created by passing the entire `options` object to
1484    `tls.createSecureContext()`.
1485  * `onread` {Object} If the `socket` option is missing, incoming data is
1486    stored in a single `buffer` and passed to the supplied `callback` when
1487    data arrives on the socket, otherwise the option is ignored. See the
1488    `onread` option of [`net.Socket`][] for details.
1489  * ...: [`tls.createSecureContext()`][] options that are used if the
1490    `secureContext` option is missing, otherwise they are ignored.
1491  * ...: Any [`socket.connect()`][] option not already listed.
1492* `callback` {Function}
1493* Returns: {tls.TLSSocket}
1494
1495The `callback` function, if specified, will be added as a listener for the
1496[`'secureConnect'`][] event.
1497
1498`tls.connect()` returns a [`tls.TLSSocket`][] object.
1499
1500Unlike the `https` API, `tls.connect()` does not enable the
1501SNI (Server Name Indication) extension by default, which may cause some
1502servers to return an incorrect certificate or reject the connection
1503altogether. To enable SNI, set the `servername` option in addition
1504to `host`.
1505
1506The following illustrates a client for the echo server example from
1507[`tls.createServer()`][]:
1508
1509```js
1510// Assumes an echo server that is listening on port 8000.
1511const tls = require('tls');
1512const fs = require('fs');
1513
1514const options = {
1515  // Necessary only if the server requires client certificate authentication.
1516  key: fs.readFileSync('client-key.pem'),
1517  cert: fs.readFileSync('client-cert.pem'),
1518
1519  // Necessary only if the server uses a self-signed certificate.
1520  ca: [ fs.readFileSync('server-cert.pem') ],
1521
1522  // Necessary only if the server's cert isn't for "localhost".
1523  checkServerIdentity: () => { return null; },
1524};
1525
1526const socket = tls.connect(8000, options, () => {
1527  console.log('client connected',
1528              socket.authorized ? 'authorized' : 'unauthorized');
1529  process.stdin.pipe(socket);
1530  process.stdin.resume();
1531});
1532socket.setEncoding('utf8');
1533socket.on('data', (data) => {
1534  console.log(data);
1535});
1536socket.on('end', () => {
1537  console.log('server ends connection');
1538});
1539```
1540
1541## `tls.connect(path[, options][, callback])`
1542<!-- YAML
1543added: v0.11.3
1544-->
1545
1546* `path` {string} Default value for `options.path`.
1547* `options` {Object} See [`tls.connect()`][].
1548* `callback` {Function} See [`tls.connect()`][].
1549* Returns: {tls.TLSSocket}
1550
1551Same as [`tls.connect()`][] except that `path` can be provided
1552as an argument instead of an option.
1553
1554A path option, if specified, will take precedence over the path argument.
1555
1556## `tls.connect(port[, host][, options][, callback])`
1557<!-- YAML
1558added: v0.11.3
1559-->
1560
1561* `port` {number} Default value for `options.port`.
1562* `host` {string} Default value for `options.host`.
1563* `options` {Object} See [`tls.connect()`][].
1564* `callback` {Function} See [`tls.connect()`][].
1565* Returns: {tls.TLSSocket}
1566
1567Same as [`tls.connect()`][] except that `port` and `host` can be provided
1568as arguments instead of options.
1569
1570A port or host option, if specified, will take precedence over any port or host
1571argument.
1572
1573## `tls.createSecureContext([options])`
1574<!-- YAML
1575added: v0.11.13
1576changes:
1577  - version: v12.12.0
1578    pr-url: https://github.com/nodejs/node/pull/28973
1579    description: Added `privateKeyIdentifier` and `privateKeyEngine` options
1580                 to get private key from an OpenSSL engine.
1581  - version: v12.11.0
1582    pr-url: https://github.com/nodejs/node/pull/29598
1583    description: Added `sigalgs` option to override supported signature
1584                 algorithms.
1585  - version: v12.0.0
1586    pr-url: https://github.com/nodejs/node/pull/26209
1587    description: TLSv1.3 support added.
1588  - version: v11.5.0
1589    pr-url: https://github.com/nodejs/node/pull/24733
1590    description: The `ca:` option now supports `BEGIN TRUSTED CERTIFICATE`.
1591  - version:
1592     - v11.4.0
1593     - v10.16.0
1594    pr-url: https://github.com/nodejs/node/pull/24405
1595    description: The `minVersion` and `maxVersion` can be used to restrict
1596                 the allowed TLS protocol versions.
1597  - version: v10.0.0
1598    pr-url: https://github.com/nodejs/node/pull/19794
1599    description: The `ecdhCurve` cannot be set to `false` anymore due to a
1600                 change in OpenSSL.
1601  - version: v9.3.0
1602    pr-url: https://github.com/nodejs/node/pull/14903
1603    description: The `options` parameter can now include `clientCertEngine`.
1604  - version: v9.0.0
1605    pr-url: https://github.com/nodejs/node/pull/15206
1606    description: The `ecdhCurve` option can now be multiple `':'` separated
1607                 curve names or `'auto'`.
1608  - version: v7.3.0
1609    pr-url: https://github.com/nodejs/node/pull/10294
1610    description: If the `key` option is an array, individual entries do not
1611                 need a `passphrase` property anymore. `Array` entries can also
1612                 just be `string`s or `Buffer`s now.
1613  - version: v5.2.0
1614    pr-url: https://github.com/nodejs/node/pull/4099
1615    description: The `ca` option can now be a single string containing multiple
1616                 CA certificates.
1617-->
1618
1619* `options` {Object}
1620  * `ca` {string|string[]|Buffer|Buffer[]} Optionally override the trusted CA
1621    certificates. Default is to trust the well-known CAs curated by Mozilla.
1622    Mozilla's CAs are completely replaced when CAs are explicitly specified
1623    using this option. The value can be a string or `Buffer`, or an `Array` of
1624    strings and/or `Buffer`s. Any string or `Buffer` can contain multiple PEM
1625    CAs concatenated together. The peer's certificate must be chainable to a CA
1626    trusted by the server for the connection to be authenticated. When using
1627    certificates that are not chainable to a well-known CA, the certificate's CA
1628    must be explicitly specified as a trusted or the connection will fail to
1629    authenticate.
1630    If the peer uses a certificate that doesn't match or chain to one of the
1631    default CAs, use the `ca` option to provide a CA certificate that the peer's
1632    certificate can match or chain to.
1633    For self-signed certificates, the certificate is its own CA, and must be
1634    provided.
1635    For PEM encoded certificates, supported types are "TRUSTED CERTIFICATE",
1636    "X509 CERTIFICATE", and "CERTIFICATE".
1637    See also [`tls.rootCertificates`][].
1638  * `cert` {string|string[]|Buffer|Buffer[]} Cert chains in PEM format. One cert
1639    chain should be provided per private key. Each cert chain should consist of
1640    the PEM formatted certificate for a provided private `key`, followed by the
1641    PEM formatted intermediate certificates (if any), in order, and not
1642    including the root CA (the root CA must be pre-known to the peer, see `ca`).
1643    When providing multiple cert chains, they do not have to be in the same
1644    order as their private keys in `key`. If the intermediate certificates are
1645    not provided, the peer will not be able to validate the certificate, and the
1646    handshake will fail.
1647  * `sigalgs` {string} Colon-separated list of supported signature algorithms.
1648    The list can contain digest algorithms (`SHA256`, `MD5` etc.), public key
1649    algorithms (`RSA-PSS`, `ECDSA` etc.), combination of both (e.g
1650    'RSA+SHA384') or TLS v1.3 scheme names (e.g. `rsa_pss_pss_sha512`).
1651    See [OpenSSL man pages](https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set1_sigalgs_list.html)
1652    for more info.
1653  * `ciphers` {string} Cipher suite specification, replacing the default. For
1654    more information, see [modifying the default cipher suite][]. Permitted
1655    ciphers can be obtained via [`tls.getCiphers()`][]. Cipher names must be
1656    uppercased in order for OpenSSL to accept them.
1657  * `clientCertEngine` {string} Name of an OpenSSL engine which can provide the
1658    client certificate.
1659  * `crl` {string|string[]|Buffer|Buffer[]} PEM formatted CRLs (Certificate
1660    Revocation Lists).
1661  * `dhparam` {string|Buffer} Diffie-Hellman parameters, required for
1662    [perfect forward secrecy][]. Use `openssl dhparam` to create the parameters.
1663    The key length must be greater than or equal to 1024 bits or else an error
1664    will be thrown. Although 1024 bits is permissible, use 2048 bits or larger
1665    for stronger security. If omitted or invalid, the parameters are silently
1666    discarded and DHE ciphers will not be available.
1667  * `ecdhCurve` {string} A string describing a named curve or a colon separated
1668    list of curve NIDs or names, for example `P-521:P-384:P-256`, to use for
1669    ECDH key agreement. Set to `auto` to select the
1670    curve automatically. Use [`crypto.getCurves()`][] to obtain a list of
1671    available curve names. On recent releases, `openssl ecparam -list_curves`
1672    will also display the name and description of each available elliptic curve.
1673    **Default:** [`tls.DEFAULT_ECDH_CURVE`][].
1674  * `honorCipherOrder` {boolean} Attempt to use the server's cipher suite
1675    preferences instead of the client's. When `true`, causes
1676    `SSL_OP_CIPHER_SERVER_PREFERENCE` to be set in `secureOptions`, see
1677    [OpenSSL Options][] for more information.
1678  * `key` {string|string[]|Buffer|Buffer[]|Object[]} Private keys in PEM format.
1679    PEM allows the option of private keys being encrypted. Encrypted keys will
1680    be decrypted with `options.passphrase`. Multiple keys using different
1681    algorithms can be provided either as an array of unencrypted key strings or
1682    buffers, or an array of objects in the form
1683    `{pem: <string|buffer>[, passphrase: <string>]}`. The object form can only
1684    occur in an array. `object.passphrase` is optional. Encrypted keys will be
1685    decrypted with `object.passphrase` if provided, or `options.passphrase` if
1686    it is not.
1687  * `privateKeyEngine` {string} Name of an OpenSSL engine to get private key
1688    from. Should be used together with `privateKeyIdentifier`.
1689  * `privateKeyIdentifier` {string} Identifier of a private key managed by
1690    an OpenSSL engine. Should be used together with `privateKeyEngine`.
1691    Should not be set together with `key`, because both options define a
1692    private key in different ways.
1693  * `maxVersion` {string} Optionally set the maximum TLS version to allow. One
1694    of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified
1695    along with the `secureProtocol` option; use one or the other.
1696    **Default:** [`tls.DEFAULT_MAX_VERSION`][].
1697  * `minVersion` {string} Optionally set the minimum TLS version to allow. One
1698    of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified
1699    along with the `secureProtocol` option; use one or the other. Avoid
1700    setting to less than TLSv1.2, but it may be required for
1701    interoperability.
1702    **Default:** [`tls.DEFAULT_MIN_VERSION`][].
1703  * `passphrase` {string} Shared passphrase used for a single private key and/or
1704    a PFX.
1705  * `pfx` {string|string[]|Buffer|Buffer[]|Object[]} PFX or PKCS12 encoded
1706    private key and certificate chain. `pfx` is an alternative to providing
1707    `key` and `cert` individually. PFX is usually encrypted, if it is,
1708    `passphrase` will be used to decrypt it. Multiple PFX can be provided either
1709    as an array of unencrypted PFX buffers, or an array of objects in the form
1710    `{buf: <string|buffer>[, passphrase: <string>]}`. The object form can only
1711    occur in an array. `object.passphrase` is optional. Encrypted PFX will be
1712    decrypted with `object.passphrase` if provided, or `options.passphrase` if
1713    it is not.
1714  * `secureOptions` {number} Optionally affect the OpenSSL protocol behavior,
1715    which is not usually necessary. This should be used carefully if at all!
1716    Value is a numeric bitmask of the `SSL_OP_*` options from
1717    [OpenSSL Options][].
1718  * `secureProtocol` {string} Legacy mechanism to select the TLS protocol
1719    version to use, it does not support independent control of the minimum and
1720    maximum version, and does not support limiting the protocol to TLSv1.3. Use
1721    `minVersion` and `maxVersion` instead. The possible values are listed as
1722    [SSL_METHODS][], use the function names as strings. For example, use
1723    `'TLSv1_1_method'` to force TLS version 1.1, or `'TLS_method'` to allow any
1724    TLS protocol version up to TLSv1.3. It is not recommended to use TLS
1725    versions less than 1.2, but it may be required for interoperability.
1726    **Default:** none, see `minVersion`.
1727  * `sessionIdContext` {string} Opaque identifier used by servers to ensure
1728    session state is not shared between applications. Unused by clients.
1729  * `ticketKeys`: {Buffer} 48-bytes of cryptographically strong pseudo-random
1730    data. See [Session Resumption][] for more information.
1731  * `sessionTimeout` {number} The number of seconds after which a TLS session
1732    created by the server will no longer be resumable. See
1733    [Session Resumption][] for more information. **Default:** `300`.
1734
1735[`tls.createServer()`][] sets the default value of the `honorCipherOrder` option
1736to `true`, other APIs that create secure contexts leave it unset.
1737
1738[`tls.createServer()`][] uses a 128 bit truncated SHA1 hash value generated
1739from `process.argv` as the default value of the `sessionIdContext` option, other
1740APIs that create secure contexts have no default value.
1741
1742The `tls.createSecureContext()` method creates a `SecureContext` object. It is
1743usable as an argument to several `tls` APIs, such as [`tls.createServer()`][]
1744and [`server.addContext()`][], but has no public methods.
1745
1746A key is *required* for ciphers that use certificates. Either `key` or
1747`pfx` can be used to provide it.
1748
1749If the `ca` option is not given, then Node.js will default to using
1750[Mozilla's publicly trusted list of CAs][].
1751
1752## `tls.createSecurePair([context][, isServer][, requestCert][, rejectUnauthorized][, options])`
1753<!-- YAML
1754added: v0.3.2
1755deprecated: v0.11.3
1756changes:
1757  - version: v5.0.0
1758    pr-url: https://github.com/nodejs/node/pull/2564
1759    description: ALPN options are supported now.
1760-->
1761
1762> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead.
1763
1764* `context` {Object} A secure context object as returned by
1765  `tls.createSecureContext()`
1766* `isServer` {boolean} `true` to specify that this TLS connection should be
1767  opened as a server.
1768* `requestCert` {boolean} `true` to specify whether a server should request a
1769  certificate from a connecting client. Only applies when `isServer` is `true`.
1770* `rejectUnauthorized` {boolean} If not `false` a server automatically reject
1771  clients with invalid certificates. Only applies when `isServer` is `true`.
1772* `options`
1773  * `enableTrace`: See [`tls.createServer()`][]
1774  * `secureContext`: A TLS context object from [`tls.createSecureContext()`][]
1775  * `isServer`: If `true` the TLS socket will be instantiated in server-mode.
1776    **Default:** `false`.
1777  * `server` {net.Server} A [`net.Server`][] instance
1778  * `requestCert`: See [`tls.createServer()`][]
1779  * `rejectUnauthorized`: See [`tls.createServer()`][]
1780  * `ALPNProtocols`: See [`tls.createServer()`][]
1781  * `SNICallback`: See [`tls.createServer()`][]
1782  * `session` {Buffer} A `Buffer` instance containing a TLS session.
1783  * `requestOCSP` {boolean} If `true`, specifies that the OCSP status request
1784    extension will be added to the client hello and an `'OCSPResponse'` event
1785    will be emitted on the socket before establishing a secure communication.
1786
1787Creates a new secure pair object with two streams, one of which reads and writes
1788the encrypted data and the other of which reads and writes the cleartext data.
1789Generally, the encrypted stream is piped to/from an incoming encrypted data
1790stream and the cleartext one is used as a replacement for the initial encrypted
1791stream.
1792
1793`tls.createSecurePair()` returns a `tls.SecurePair` object with `cleartext` and
1794`encrypted` stream properties.
1795
1796Using `cleartext` has the same API as [`tls.TLSSocket`][].
1797
1798The `tls.createSecurePair()` method is now deprecated in favor of
1799`tls.TLSSocket()`. For example, the code:
1800
1801```js
1802pair = tls.createSecurePair(/* ... */);
1803pair.encrypted.pipe(socket);
1804socket.pipe(pair.encrypted);
1805```
1806
1807can be replaced by:
1808
1809```js
1810secureSocket = tls.TLSSocket(socket, options);
1811```
1812
1813where `secureSocket` has the same API as `pair.cleartext`.
1814
1815## `tls.createServer([options][, secureConnectionListener])`
1816<!-- YAML
1817added: v0.3.2
1818changes:
1819  - version: v12.3.0
1820    pr-url: https://github.com/nodejs/node/pull/27665
1821    description: The `options` parameter now supports `net.createServer()`
1822                 options.
1823  - version: v9.3.0
1824    pr-url: https://github.com/nodejs/node/pull/14903
1825    description: The `options` parameter can now include `clientCertEngine`.
1826  - version: v8.0.0
1827    pr-url: https://github.com/nodejs/node/pull/11984
1828    description: The `ALPNProtocols` option can be a `TypedArray` or
1829     `DataView` now.
1830  - version: v5.0.0
1831    pr-url: https://github.com/nodejs/node/pull/2564
1832    description: ALPN options are supported now.
1833-->
1834
1835* `options` {Object}
1836  * `ALPNProtocols`: {string[]|Buffer[]|TypedArray[]|DataView[]|Buffer|
1837    TypedArray|DataView}
1838    An array of strings, `Buffer`s or `TypedArray`s or `DataView`s, or a single
1839    `Buffer` or `TypedArray` or `DataView` containing the supported ALPN
1840    protocols. `Buffer`s should have the format `[len][name][len][name]...`
1841    e.g. `0x05hello0x05world`, where the first byte is the length of the next
1842    protocol name. Passing an array is usually much simpler, e.g.
1843    `['hello', 'world']`. (Protocols should be ordered by their priority.)
1844  * `clientCertEngine` {string} Name of an OpenSSL engine which can provide the
1845    client certificate.
1846  * `enableTrace` {boolean} If `true`, [`tls.TLSSocket.enableTrace()`][] will be
1847    called on new connections. Tracing can be enabled after the secure
1848    connection is established, but this option must be used to trace the secure
1849    connection setup. **Default:** `false`.
1850  * `handshakeTimeout` {number} Abort the connection if the SSL/TLS handshake
1851    does not finish in the specified number of milliseconds.
1852    A `'tlsClientError'` is emitted on the `tls.Server` object whenever
1853    a handshake times out. **Default:** `120000` (120 seconds).
1854  * `rejectUnauthorized` {boolean} If not `false` the server will reject any
1855    connection which is not authorized with the list of supplied CAs. This
1856    option only has an effect if `requestCert` is `true`. **Default:** `true`.
1857  * `requestCert` {boolean} If `true` the server will request a certificate from
1858    clients that connect and attempt to verify that certificate. **Default:**
1859    `false`.
1860  * `sessionTimeout` {number} The number of seconds after which a TLS session
1861    created by the server will no longer be resumable. See
1862    [Session Resumption][] for more information. **Default:** `300`.
1863  * `SNICallback(servername, callback)` {Function} A function that will be
1864    called if the client supports SNI TLS extension. Two arguments will be
1865    passed when called: `servername` and `callback`. `callback` is an
1866    error-first callback that takes two optional arguments: `error` and `ctx`.
1867    `ctx`, if provided, is a `SecureContext` instance.
1868    [`tls.createSecureContext()`][] can be used to get a proper `SecureContext`.
1869    If `callback` is called with a falsy `ctx` argument, the default secure
1870    context of the server will be used. If `SNICallback` wasn't provided the
1871    default callback with high-level API will be used (see below).
1872  * `ticketKeys`: {Buffer} 48-bytes of cryptographically strong pseudo-random
1873    data. See [Session Resumption][] for more information.
1874  * `pskCallback` {Function}
1875    * socket: {tls.TLSSocket} the server [`tls.TLSSocket`][] instance for
1876      this connection.
1877    * identity: {string} identity parameter sent from the client.
1878    * Returns: {Buffer|TypedArray|DataView} pre-shared key that must either be
1879      a buffer or `null` to stop the negotiation process. Returned PSK must be
1880      compatible with the selected cipher's digest.
1881    When negotiating TLS-PSK (pre-shared keys), this function is called
1882    with the identity provided by the client.
1883    If the return value is `null` the negotiation process will stop and an
1884    "unknown_psk_identity" alert message will be sent to the other party.
1885    If the server wishes to hide the fact that the PSK identity was not known,
1886    the callback must provide some random data as `psk` to make the connection
1887    fail with "decrypt_error" before negotiation is finished.
1888    PSK ciphers are disabled by default, and using TLS-PSK thus
1889    requires explicitly specifying a cipher suite with the `ciphers` option.
1890    More information can be found in the [RFC 4279][].
1891  * `pskIdentityHint` {string} optional hint to send to a client to help
1892    with selecting the identity during TLS-PSK negotiation. Will be ignored
1893    in TLS 1.3. Upon failing to set pskIdentityHint `'tlsClientError'` will be
1894    emitted with `'ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED'` code.
1895  * ...: Any [`tls.createSecureContext()`][] option can be provided. For
1896    servers, the identity options (`pfx`, `key`/`cert` or `pskCallback`)
1897    are usually required.
1898  * ...: Any [`net.createServer()`][] option can be provided.
1899* `secureConnectionListener` {Function}
1900* Returns: {tls.Server}
1901
1902Creates a new [`tls.Server`][]. The `secureConnectionListener`, if provided, is
1903automatically set as a listener for the [`'secureConnection'`][] event.
1904
1905The `ticketKeys` options is automatically shared between `cluster` module
1906workers.
1907
1908The following illustrates a simple echo server:
1909
1910```js
1911const tls = require('tls');
1912const fs = require('fs');
1913
1914const options = {
1915  key: fs.readFileSync('server-key.pem'),
1916  cert: fs.readFileSync('server-cert.pem'),
1917
1918  // This is necessary only if using client certificate authentication.
1919  requestCert: true,
1920
1921  // This is necessary only if the client uses a self-signed certificate.
1922  ca: [ fs.readFileSync('client-cert.pem') ]
1923};
1924
1925const server = tls.createServer(options, (socket) => {
1926  console.log('server connected',
1927              socket.authorized ? 'authorized' : 'unauthorized');
1928  socket.write('welcome!\n');
1929  socket.setEncoding('utf8');
1930  socket.pipe(socket);
1931});
1932server.listen(8000, () => {
1933  console.log('server bound');
1934});
1935```
1936
1937The server can be tested by connecting to it using the example client from
1938[`tls.connect()`][].
1939
1940## `tls.getCiphers()`
1941<!-- YAML
1942added: v0.10.2
1943-->
1944
1945* Returns: {string[]}
1946
1947Returns an array with the names of the supported TLS ciphers. The names are
1948lower-case for historical reasons, but must be uppercased to be used in
1949the `ciphers` option of [`tls.createSecureContext()`][].
1950
1951Cipher names that start with `'tls_'` are for TLSv1.3, all the others are for
1952TLSv1.2 and below.
1953
1954```js
1955console.log(tls.getCiphers()); // ['aes128-gcm-sha256', 'aes128-sha', ...]
1956```
1957
1958## `tls.rootCertificates`
1959<!-- YAML
1960added: v12.3.0
1961-->
1962
1963* {string[]}
1964
1965An immutable array of strings representing the root certificates (in PEM format)
1966from the bundled Mozilla CA store as supplied by current Node.js version.
1967
1968The bundled CA store, as supplied by Node.js, is a snapshot of Mozilla CA store
1969that is fixed at release time. It is identical on all supported platforms.
1970
1971## `tls.DEFAULT_ECDH_CURVE`
1972<!-- YAML
1973added: v0.11.13
1974changes:
1975  - version: v10.0.0
1976    pr-url: https://github.com/nodejs/node/pull/16853
1977    description: Default value changed to `'auto'`.
1978-->
1979
1980The default curve name to use for ECDH key agreement in a tls server. The
1981default value is `'auto'`. See [`tls.createSecureContext()`][] for further
1982information.
1983
1984## `tls.DEFAULT_MAX_VERSION`
1985<!-- YAML
1986added: v11.4.0
1987-->
1988
1989* {string} The default value of the `maxVersion` option of
1990  [`tls.createSecureContext()`][]. It can be assigned any of the supported TLS
1991  protocol versions, `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`.
1992  **Default:** `'TLSv1.3'`, unless changed using CLI options. Using
1993  `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets
1994  the default to `'TLSv1.3'`. If multiple of the options are provided, the
1995  highest maximum is used.
1996
1997## `tls.DEFAULT_MIN_VERSION`
1998<!-- YAML
1999added: v11.4.0
2000-->
2001
2002* {string} The default value of the `minVersion` option of
2003  [`tls.createSecureContext()`][]. It can be assigned any of the supported TLS
2004  protocol versions, `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`.
2005  **Default:** `'TLSv1.2'`, unless changed using CLI options. Using
2006  `--tls-min-v1.0` sets the default to `'TLSv1'`. Using `--tls-min-v1.1` sets
2007  the default to `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to
2008  `'TLSv1.3'`. If multiple of the options are provided, the lowest minimum is
2009  used.
2010
2011[CVE-2021-44531]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44531
2012[Chrome's 'modern cryptography' setting]: https://www.chromium.org/Home/chromium-security/education/tls#TOC-Cipher-Suites
2013[DHE]: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
2014[ECDHE]: https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman
2015[Mozilla's publicly trusted list of CAs]: https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt
2016[OCSP request]: https://en.wikipedia.org/wiki/OCSP_stapling
2017[OpenSSL Options]: crypto.md#crypto_openssl_options
2018[RFC 2246]: https://www.ietf.org/rfc/rfc2246.txt
2019[RFC 4086]: https://tools.ietf.org/html/rfc4086
2020[RFC 4279]: https://tools.ietf.org/html/rfc4279
2021[RFC 5077]: https://tools.ietf.org/html/rfc5077
2022[RFC 5929]: https://tools.ietf.org/html/rfc5929
2023[SSL_METHODS]: https://www.openssl.org/docs/man1.1.1/man7/ssl.html#Dealing-with-Protocol-Methods
2024[Session Resumption]: #tls_session_resumption
2025[Stream]: stream.md#stream_stream
2026[TLS recommendations]: https://wiki.mozilla.org/Security/Server_Side_TLS
2027[`'newSession'`]: #tls_event_newsession
2028[`'resumeSession'`]: #tls_event_resumesession
2029[`'secureConnect'`]: #tls_event_secureconnect
2030[`'secureConnection'`]: #tls_event_secureconnection
2031[`'session'`]: #tls_event_session
2032[`--tls-cipher-list`]: cli.md#cli_tls_cipher_list_list
2033[`Duplex`]: stream.md#stream_class_stream_duplex
2034[`NODE_OPTIONS`]: cli.md#cli_node_options_options
2035[`SSL_export_keying_material`]: https://www.openssl.org/docs/man1.1.1/man3/SSL_export_keying_material.html
2036[`SSL_get_version`]: https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html
2037[`crypto.getCurves()`]: crypto.md#crypto_crypto_getcurves
2038[`net.Server.address()`]: net.md#net_server_address
2039[`net.Server`]: net.md#net_class_net_server
2040[`net.Socket`]: net.md#net_class_net_socket
2041[`net.createServer()`]: net.md#net_net_createserver_options_connectionlistener
2042[`server.addContext()`]: #tls_server_addcontext_hostname_context
2043[`server.getConnections()`]: net.md#net_server_getconnections_callback
2044[`server.getTicketKeys()`]: #tls_server_getticketkeys
2045[`server.listen()`]: net.md#net_server_listen
2046[`server.setTicketKeys()`]: #tls_server_setticketkeys_keys
2047[`socket.connect()`]: net.md#net_socket_connect_options_connectlistener
2048[`tls.DEFAULT_ECDH_CURVE`]: #tls_tls_default_ecdh_curve
2049[`tls.DEFAULT_MAX_VERSION`]: #tls_tls_default_max_version
2050[`tls.DEFAULT_MIN_VERSION`]: #tls_tls_default_min_version
2051[`tls.Server`]: #tls_class_tls_server
2052[`tls.TLSSocket.enableTrace()`]: #tls_tlssocket_enabletrace
2053[`tls.TLSSocket.getPeerCertificate()`]: #tls_tlssocket_getpeercertificate_detailed
2054[`tls.TLSSocket.getSession()`]: #tls_tlssocket_getsession
2055[`tls.TLSSocket.getTLSTicket()`]: #tls_tlssocket_gettlsticket
2056[`tls.TLSSocket`]: #tls_class_tls_tlssocket
2057[`tls.connect()`]: #tls_tls_connect_options_callback
2058[`tls.createSecureContext()`]: #tls_tls_createsecurecontext_options
2059[`tls.createSecurePair()`]: #tls_tls_createsecurepair_context_isserver_requestcert_rejectunauthorized_options
2060[`tls.createServer()`]: #tls_tls_createserver_options_secureconnectionlistener
2061[`tls.getCiphers()`]: #tls_tls_getciphers
2062[`tls.rootCertificates`]: #tls_tls_rootcertificates
2063[asn1.js]: https://www.npmjs.com/package/asn1.js
2064[certificate object]: #tls_certificate_object
2065[cipher list format]: https://www.openssl.org/docs/man1.1.1/man1/ciphers.html#CIPHER-LIST-FORMAT
2066[forward secrecy]: https://en.wikipedia.org/wiki/Perfect_forward_secrecy
2067[modifying the default cipher suite]: #tls_modifying_the_default_tls_cipher_suite
2068[perfect forward secrecy]: #tls_perfect_forward_secrecy
2069[specific attacks affecting larger AES key sizes]: https://www.schneier.com/blog/archives/2009/07/another_new_aes.html
2070