• 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`][] command
312line switch (directly, or via the [`NODE_OPTIONS`][] environment variable). For
313instance, the following makes `ECDHE-RSA-AES128-GCM-SHA256:!RC4` the default TLS
314cipher 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: v12.3.0
444-->
445
446* `line` {Buffer} Line of ASCII text, in NSS `SSLKEYLOGFILE` format.
447* `tlsSocket` {tls.TLSSocket} The `tls.TLSSocket` instance on which it was
448  generated.
449
450The `keylog` event is emitted when key material is generated or received by
451a connection to this server (typically before handshake has completed, but not
452necessarily). This keying material can be stored for debugging, as it allows
453captured TLS traffic to be decrypted. It may be emitted multiple times for
454each socket.
455
456A typical use case is to append received lines to a common text file, which
457is later used by software (such as Wireshark) to decrypt the traffic:
458
459```js
460const logFile = fs.createWriteStream('/tmp/ssl-keys.log', { flags: 'a' });
461// ...
462server.on('keylog', (line, tlsSocket) => {
463  if (tlsSocket.remoteAddress !== '...')
464    return; // Only log keys for a particular IP
465  logFile.write(line);
466});
467```
468
469### Event: `'newSession'`
470<!-- YAML
471added: v0.9.2
472changes:
473  - version: v0.11.12
474    pr-url: https://github.com/nodejs/node-v0.x-archive/pull/7118
475    description: The `callback` argument is now supported.
476-->
477
478The `'newSession'` event is emitted upon creation of a new TLS session. This may
479be used to store sessions in external storage. The data should be provided to
480the [`'resumeSession'`][] callback.
481
482The listener callback is passed three arguments when called:
483
484* `sessionId` {Buffer} The TLS session identifier
485* `sessionData` {Buffer} The TLS session data
486* `callback` {Function} A callback function taking no arguments that must be
487  invoked in order for data to be sent or received over the secure connection.
488
489Listening for this event will have an effect only on connections established
490after the addition of the event listener.
491
492### Event: `'OCSPRequest'`
493<!-- YAML
494added: v0.11.13
495-->
496
497The `'OCSPRequest'` event is emitted when the client sends a certificate status
498request. The listener callback is passed three arguments when called:
499
500* `certificate` {Buffer} The server certificate
501* `issuer` {Buffer} The issuer's certificate
502* `callback` {Function} A callback function that must be invoked to provide
503  the results of the OCSP request.
504
505The server's current certificate can be parsed to obtain the OCSP URL
506and certificate ID; after obtaining an OCSP response, `callback(null, resp)` is
507then invoked, where `resp` is a `Buffer` instance containing the OCSP response.
508Both `certificate` and `issuer` are `Buffer` DER-representations of the
509primary and issuer's certificates. These can be used to obtain the OCSP
510certificate ID and OCSP endpoint URL.
511
512Alternatively, `callback(null, null)` may be called, indicating that there was
513no OCSP response.
514
515Calling `callback(err)` will result in a `socket.destroy(err)` call.
516
517The typical flow of an OCSP Request is as follows:
518
5191. Client connects to the server and sends an `'OCSPRequest'` (via the status
520   info extension in ClientHello).
5212. Server receives the request and emits the `'OCSPRequest'` event, calling the
522   listener if registered.
5233. Server extracts the OCSP URL from either the `certificate` or `issuer` and
524   performs an [OCSP request][] to the CA.
5254. Server receives `'OCSPResponse'` from the CA and sends it back to the client
526   via the `callback` argument
5275. Client validates the response and either destroys the socket or performs a
528   handshake.
529
530The `issuer` can be `null` if the certificate is either self-signed or the
531issuer is not in the root certificates list. (An issuer may be provided
532via the `ca` option when establishing the TLS connection.)
533
534Listening for this event will have an effect only on connections established
535after the addition of the event listener.
536
537An npm module like [asn1.js][] may be used to parse the certificates.
538
539### Event: `'resumeSession'`
540<!-- YAML
541added: v0.9.2
542-->
543
544The `'resumeSession'` event is emitted when the client requests to resume a
545previous TLS session. The listener callback is passed two arguments when
546called:
547
548* `sessionId` {Buffer} The TLS session identifier
549* `callback` {Function} A callback function to be called when the prior session
550  has been recovered: `callback([err[, sessionData]])`
551  * `err` {Error}
552  * `sessionData` {Buffer}
553
554The event listener should perform a lookup in external storage for the
555`sessionData` saved by the [`'newSession'`][] event handler using the given
556`sessionId`. If found, call `callback(null, sessionData)` to resume the session.
557If not found, the session cannot be resumed. `callback()` must be called
558without `sessionData` so that the handshake can continue and a new session can
559be created. It is possible to call `callback(err)` to terminate the incoming
560connection and destroy the socket.
561
562Listening for this event will have an effect only on connections established
563after the addition of the event listener.
564
565The following illustrates resuming a TLS session:
566
567```js
568const tlsSessionStore = {};
569server.on('newSession', (id, data, cb) => {
570  tlsSessionStore[id.toString('hex')] = data;
571  cb();
572});
573server.on('resumeSession', (id, cb) => {
574  cb(null, tlsSessionStore[id.toString('hex')] || null);
575});
576```
577
578### Event: `'secureConnection'`
579<!-- YAML
580added: v0.3.2
581-->
582
583The `'secureConnection'` event is emitted after the handshaking process for a
584new connection has successfully completed. The listener callback is passed a
585single argument when called:
586
587* `tlsSocket` {tls.TLSSocket} The established TLS socket.
588
589The `tlsSocket.authorized` property is a `boolean` indicating whether the
590client has been verified by one of the supplied Certificate Authorities for the
591server. If `tlsSocket.authorized` is `false`, then `socket.authorizationError`
592is set to describe how authorization failed. Depending on the settings
593of the TLS server, unauthorized connections may still be accepted.
594
595The `tlsSocket.alpnProtocol` property is a string that contains the selected
596ALPN protocol. When ALPN has no selected protocol, `tlsSocket.alpnProtocol`
597equals `false`.
598
599The `tlsSocket.servername` property is a string containing the server name
600requested via SNI.
601
602### Event: `'tlsClientError'`
603<!-- YAML
604added: v6.0.0
605-->
606
607The `'tlsClientError'` event is emitted when an error occurs before a secure
608connection is established. The listener callback is passed two arguments when
609called:
610
611* `exception` {Error} The `Error` object describing the error
612* `tlsSocket` {tls.TLSSocket} The `tls.TLSSocket` instance from which the
613  error originated.
614
615### `server.addContext(hostname, context)`
616<!-- YAML
617added: v0.5.3
618-->
619
620* `hostname` {string} A SNI host name or wildcard (e.g. `'*'`)
621* `context` {Object} An object containing any of the possible properties
622  from the [`tls.createSecureContext()`][] `options` arguments (e.g. `key`,
623  `cert`, `ca`, etc).
624
625The `server.addContext()` method adds a secure context that will be used if
626the client request's SNI name matches the supplied `hostname` (or wildcard).
627
628### `server.address()`
629<!-- YAML
630added: v0.6.0
631-->
632
633* Returns: {Object}
634
635Returns the bound address, the address family name, and port of the
636server as reported by the operating system. See [`net.Server.address()`][] for
637more information.
638
639### `server.close([callback])`
640<!-- YAML
641added: v0.3.2
642-->
643
644* `callback` {Function} A listener callback that will be registered to listen
645for the server instance's `'close'` event.
646* Returns: {tls.Server}
647
648The `server.close()` method stops the server from accepting new connections.
649
650This function operates asynchronously. The `'close'` event will be emitted
651when the server has no more open connections.
652
653### `server.connections`
654<!-- YAML
655added: v0.3.2
656deprecated: v0.9.7
657-->
658
659> Stability: 0 - Deprecated: Use [`server.getConnections()`][] instead.
660
661* {number}
662
663Returns the current number of concurrent connections on the server.
664
665### `server.getTicketKeys()`
666<!-- YAML
667added: v3.0.0
668-->
669
670* Returns: {Buffer} A 48-byte buffer containing the session ticket keys.
671
672Returns the session ticket keys.
673
674See [Session Resumption][] for more information.
675
676### `server.listen()`
677
678Starts the server listening for encrypted connections.
679This method is identical to [`server.listen()`][] from [`net.Server`][].
680
681### `server.setSecureContext(options)`
682<!-- YAML
683added: v11.0.0
684-->
685
686* `options` {Object} An object containing any of the possible properties from
687  the [`tls.createSecureContext()`][] `options` arguments (e.g. `key`, `cert`,
688  `ca`, etc).
689
690The `server.setSecureContext()` method replaces the secure context of an
691existing server. Existing connections to the server are not interrupted.
692
693### `server.setTicketKeys(keys)`
694<!-- YAML
695added: v3.0.0
696-->
697
698* `keys` {Buffer} A 48-byte buffer containing the session ticket keys.
699
700Sets the session ticket keys.
701
702Changes to the ticket keys are effective only for future server connections.
703Existing or currently pending server connections will use the previous keys.
704
705See [Session Resumption][] for more information.
706
707## Class: `tls.TLSSocket`
708<!-- YAML
709added: v0.11.4
710-->
711
712* Extends: {net.Socket}
713
714Performs transparent encryption of written data and all required TLS
715negotiation.
716
717Instances of `tls.TLSSocket` implement the duplex [Stream][] interface.
718
719Methods that return TLS connection metadata (e.g.
720[`tls.TLSSocket.getPeerCertificate()`][] will only return data while the
721connection is open.
722
723### `new tls.TLSSocket(socket[, options])`
724<!-- YAML
725added: v0.11.4
726changes:
727  - version: v12.2.0
728    pr-url: https://github.com/nodejs/node/pull/27497
729    description: The `enableTrace` option is now supported.
730  - version: v5.0.0
731    pr-url: https://github.com/nodejs/node/pull/2564
732    description: ALPN options are supported now.
733-->
734
735* `socket` {net.Socket|stream.Duplex}
736  On the server side, any `Duplex` stream. On the client side, any
737  instance of [`net.Socket`][] (for generic `Duplex` stream support
738  on the client side, [`tls.connect()`][] must be used).
739* `options` {Object}
740  * `enableTrace`: See [`tls.createServer()`][]
741  * `isServer`: The SSL/TLS protocol is asymmetrical, TLSSockets must know if
742    they are to behave as a server or a client. If `true` the TLS socket will be
743    instantiated as a server. **Default:** `false`.
744  * `server` {net.Server} A [`net.Server`][] instance.
745  * `requestCert`: Whether to authenticate the remote peer by requesting a
746     certificate. Clients always request a server certificate. Servers
747     (`isServer` is true) may set `requestCert` to true to request a client
748     certificate.
749  * `rejectUnauthorized`: See [`tls.createServer()`][]
750  * `ALPNProtocols`: See [`tls.createServer()`][]
751  * `SNICallback`: See [`tls.createServer()`][]
752  * `session` {Buffer} A `Buffer` instance containing a TLS session.
753  * `requestOCSP` {boolean} If `true`, specifies that the OCSP status request
754    extension will be added to the client hello and an `'OCSPResponse'` event
755    will be emitted on the socket before establishing a secure communication
756  * `secureContext`: TLS context object created with
757    [`tls.createSecureContext()`][]. If a `secureContext` is _not_ provided, one
758    will be created by passing the entire `options` object to
759    `tls.createSecureContext()`.
760  * ...: [`tls.createSecureContext()`][] options that are used if the
761    `secureContext` option is missing. Otherwise, they are ignored.
762
763Construct a new `tls.TLSSocket` object from an existing TCP socket.
764
765### Event: `'keylog'`
766<!-- YAML
767added: v12.3.0
768-->
769
770* `line` {Buffer} Line of ASCII text, in NSS `SSLKEYLOGFILE` format.
771
772The `keylog` event is emitted on a `tls.TLSSocket` when key material
773is generated or received by the socket. This keying material can be stored
774for debugging, as it allows captured TLS traffic to be decrypted. It may
775be emitted multiple times, before or after the handshake completes.
776
777A typical use case is to append received lines to a common text file, which
778is later used by software (such as Wireshark) to decrypt the traffic:
779
780```js
781const logFile = fs.createWriteStream('/tmp/ssl-keys.log', { flags: 'a' });
782// ...
783tlsSocket.on('keylog', (line) => logFile.write(line));
784```
785
786### Event: `'OCSPResponse'`
787<!-- YAML
788added: v0.11.13
789-->
790
791The `'OCSPResponse'` event is emitted if the `requestOCSP` option was set
792when the `tls.TLSSocket` was created and an OCSP response has been received.
793The listener callback is passed a single argument when called:
794
795* `response` {Buffer} The server's OCSP response
796
797Typically, the `response` is a digitally signed object from the server's CA that
798contains information about server's certificate revocation status.
799
800### Event: `'secureConnect'`
801<!-- YAML
802added: v0.11.4
803-->
804
805The `'secureConnect'` event is emitted after the handshaking process for a new
806connection has successfully completed. The listener callback will be called
807regardless of whether or not the server's certificate has been authorized. It
808is the client's responsibility to check the `tlsSocket.authorized` property to
809determine if the server certificate was signed by one of the specified CAs. If
810`tlsSocket.authorized === false`, then the error can be found by examining the
811`tlsSocket.authorizationError` property. If ALPN was used, the
812`tlsSocket.alpnProtocol` property can be checked to determine the negotiated
813protocol.
814
815### Event: `'session'`
816<!-- YAML
817added: v11.10.0
818-->
819
820* `session` {Buffer}
821
822The `'session'` event is emitted on a client `tls.TLSSocket` when a new session
823or TLS ticket is available. This may or may not be before the handshake is
824complete, depending on the TLS protocol version that was negotiated. The event
825is not emitted on the server, or if a new session was not created, for example,
826when the connection was resumed. For some TLS protocol versions the event may be
827emitted multiple times, in which case all the sessions can be used for
828resumption.
829
830On the client, the `session` can be provided to the `session` option of
831[`tls.connect()`][] to resume the connection.
832
833See [Session Resumption][] for more information.
834
835For TLSv1.2 and below, [`tls.TLSSocket.getSession()`][] can be called once
836the handshake is complete. For TLSv1.3, only ticket-based resumption is allowed
837by the protocol, multiple tickets are sent, and the tickets aren't sent until
838after the handshake completes. So it is necessary to wait for the
839`'session'` event to get a resumable session. Applications
840should use the `'session'` event instead of `getSession()` to ensure
841they will work for all TLS versions. Applications that only expect to
842get or use one session should listen for this event only once:
843
844```js
845tlsSocket.once('session', (session) => {
846  // The session can be used immediately or later.
847  tls.connect({
848    session: session,
849    // Other connect options...
850  });
851});
852```
853
854### `tlsSocket.address()`
855<!-- YAML
856added: v0.11.4
857-->
858
859* Returns: {Object}
860
861Returns the bound `address`, the address `family` name, and `port` of the
862underlying socket as reported by the operating system:
863`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }`.
864
865### `tlsSocket.authorizationError`
866<!-- YAML
867added: v0.11.4
868-->
869
870Returns the reason why the peer's certificate was not been verified. This
871property is set only when `tlsSocket.authorized === false`.
872
873### `tlsSocket.authorized`
874<!-- YAML
875added: v0.11.4
876-->
877
878* Returns: {boolean}
879
880Returns `true` if the peer certificate was signed by one of the CAs specified
881when creating the `tls.TLSSocket` instance, otherwise `false`.
882
883### `tlsSocket.disableRenegotiation()`
884<!-- YAML
885added: v8.4.0
886-->
887
888Disables TLS renegotiation for this `TLSSocket` instance. Once called, attempts
889to renegotiate will trigger an `'error'` event on the `TLSSocket`.
890
891### `tlsSocket.enableTrace()`
892<!-- YAML
893added: v12.2.0
894-->
895
896When enabled, TLS packet trace information is written to `stderr`. This can be
897used to debug TLS connection problems.
898
899Note: The format of the output is identical to the output of `openssl s_client
900-trace` or `openssl s_server -trace`. While it is produced by OpenSSL's
901`SSL_trace()` function, the format is undocumented, can change without notice,
902and should not be relied on.
903
904### `tlsSocket.encrypted`
905<!-- YAML
906added: v0.11.4
907-->
908
909Always returns `true`. This may be used to distinguish TLS sockets from regular
910`net.Socket` instances.
911
912### `tlsSocket.getCertificate()`
913<!-- YAML
914added: v11.2.0
915-->
916
917* Returns: {Object}
918
919Returns an object representing the local certificate. The returned object has
920some properties corresponding to the fields of the certificate.
921
922See [`tls.TLSSocket.getPeerCertificate()`][] for an example of the certificate
923structure.
924
925If there is no local certificate, an empty object will be returned. If the
926socket has been destroyed, `null` will be returned.
927
928### `tlsSocket.getCipher()`
929<!-- YAML
930added: v0.11.4
931changes:
932  - version: v12.0.0
933    pr-url: https://github.com/nodejs/node/pull/26625
934    description: Return the minimum cipher version, instead of a fixed string
935      (`'TLSv1/SSLv3'`).
936  - version: v12.16.0
937    pr-url: https://github.com/nodejs/node/pull/30637
938    description: Return the IETF cipher name as `standardName`.
939-->
940
941* Returns: {Object}
942  * `name` {string} OpenSSL name for the cipher suite.
943  * `standardName` {string} IETF name for the cipher suite.
944  * `version` {string} The minimum TLS protocol version supported by this cipher
945    suite.
946
947Returns an object containing information on the negotiated cipher suite.
948
949For example:
950```json
951{
952    "name": "AES128-SHA256",
953    "standardName": "TLS_RSA_WITH_AES_128_CBC_SHA256",
954    "version": "TLSv1.2"
955}
956```
957
958See
959[SSL_CIPHER_get_name](https://www.openssl.org/docs/man1.1.1/man3/SSL_CIPHER_get_name.html)
960for more information.
961
962### `tlsSocket.getEphemeralKeyInfo()`
963<!-- YAML
964added: v5.0.0
965-->
966
967* Returns: {Object}
968
969Returns an object representing the type, name, and size of parameter of
970an ephemeral key exchange in [perfect forward secrecy][] on a client
971connection. It returns an empty object when the key exchange is not
972ephemeral. As this is only supported on a client socket; `null` is returned
973if called on a server socket. The supported types are `'DH'` and `'ECDH'`. The
974`name` property is available only when type is `'ECDH'`.
975
976For example: `{ type: 'ECDH', name: 'prime256v1', size: 256 }`.
977
978### `tlsSocket.getFinished()`
979<!-- YAML
980added: v9.9.0
981-->
982
983* Returns: {Buffer|undefined} The latest `Finished` message that has been
984sent to the socket as part of a SSL/TLS handshake, or `undefined` if
985no `Finished` message has been sent yet.
986
987As the `Finished` messages are message digests of the complete handshake
988(with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can
989be used for external authentication procedures when the authentication
990provided by SSL/TLS is not desired or is not enough.
991
992Corresponds to the `SSL_get_finished` routine in OpenSSL and may be used
993to implement the `tls-unique` channel binding from [RFC 5929][].
994
995### `tlsSocket.getPeerCertificate([detailed])`
996<!-- YAML
997added: v0.11.4
998-->
999
1000* `detailed` {boolean} Include the full certificate chain if `true`, otherwise
1001  include just the peer's certificate.
1002* Returns: {Object} A certificate object.
1003
1004Returns an object representing the peer's certificate. If the peer does not
1005provide a certificate, an empty object will be returned. If the socket has been
1006destroyed, `null` will be returned.
1007
1008If the full certificate chain was requested, each certificate will include an
1009`issuerCertificate` property containing an object representing its issuer's
1010certificate.
1011
1012#### Certificate object
1013<!-- YAML
1014changes:
1015  - version: v11.4.0
1016    pr-url: https://github.com/nodejs/node/pull/24358
1017    description: Support Elliptic Curve public key info.
1018-->
1019
1020A certificate object has properties corresponding to the fields of the
1021certificate.
1022
1023* `raw` {Buffer} The DER encoded X.509 certificate data.
1024* `subject` {Object} The certificate subject, described in terms of
1025   Country (`C:`), StateOrProvince (`ST`), Locality (`L`), Organization (`O`),
1026   OrganizationalUnit (`OU`), and CommonName (`CN`). The CommonName is typically
1027   a DNS name with TLS certificates. Example:
1028   `{C: 'UK', ST: 'BC', L: 'Metro', O: 'Node Fans', OU: 'Docs', CN: 'example.com'}`.
1029* `issuer` {Object} The certificate issuer, described in the same terms as the
1030   `subject`.
1031* `valid_from` {string} The date-time the certificate is valid from.
1032* `valid_to` {string} The date-time the certificate is valid to.
1033* `serialNumber` {string} The certificate serial number, as a hex string.
1034   Example: `'B9B0D332A1AA5635'`.
1035* `fingerprint` {string} The SHA-1 digest of the DER encoded certificate. It is
1036  returned as a `:` separated hexadecimal string. Example: `'2A:7A:C2:DD:...'`.
1037* `fingerprint256` {string} The SHA-256 digest of the DER encoded certificate.
1038   It is returned as a `:` separated hexadecimal string. Example:
1039   `'2A:7A:C2:DD:...'`.
1040* `ext_key_usage` {Array} (Optional) The extended key usage, a set of OIDs.
1041* `subjectaltname` {string} (Optional) A string containing concatenated names
1042 for the subject, an alternative to the `subject` names.
1043* `infoAccess` {Array} (Optional) An array describing the AuthorityInfoAccess,
1044   used with OCSP.
1045* `issuerCertificate` {Object} (Optional) The issuer certificate object. For
1046   self-signed certificates, this may be a circular reference.
1047
1048The certificate may contain information about the public key, depending on
1049the key type.
1050
1051For RSA keys, the following properties may be defined:
1052
1053* `bits` {number} The RSA bit size. Example: `1024`.
1054* `exponent` {string} The RSA exponent, as a string in hexadecimal number
1055  notation. Example: `'0x010001'`.
1056* `modulus` {string} The RSA modulus, as a hexadecimal string. Example:
1057   `'B56CE45CB7...'`.
1058* `pubkey` {Buffer} The public key.
1059
1060For EC keys, the following properties may be defined:
1061
1062* `pubkey` {Buffer} The public key.
1063* `bits` {number} The key size in bits. Example: `256`.
1064* `asn1Curve` {string} (Optional) The ASN.1 name of the OID of the elliptic
1065  curve. Well-known curves are identified by an OID. While it is unusual, it is
1066  possible that the curve is identified by its mathematical properties, in which
1067  case it will not have an OID. Example: `'prime256v1'`.
1068* `nistCurve` {string} (Optional) The NIST name for the elliptic curve, if it
1069  has one (not all well-known curves have been assigned names by NIST). Example:
1070  `'P-256'`.
1071
1072Example certificate:
1073
1074<!-- eslint-skip -->
1075```js
1076{ subject:
1077   { OU: [ 'Domain Control Validated', 'PositiveSSL Wildcard' ],
1078     CN: '*.nodejs.org' },
1079  issuer:
1080   { C: 'GB',
1081     ST: 'Greater Manchester',
1082     L: 'Salford',
1083     O: 'COMODO CA Limited',
1084     CN: 'COMODO RSA Domain Validation Secure Server CA' },
1085  subjectaltname: 'DNS:*.nodejs.org, DNS:nodejs.org',
1086  infoAccess:
1087   { 'CA Issuers - URI':
1088      [ 'http://crt.comodoca.com/COMODORSADomainValidationSecureServerCA.crt' ],
1089     'OCSP - URI': [ 'http://ocsp.comodoca.com' ] },
1090  modulus: 'B56CE45CB740B09A13F64AC543B712FF9EE8E4C284B542A1708A27E82A8D151CA178153E12E6DDA15BF70FFD96CB8A88618641BDFCCA03527E665B70D779C8A349A6F88FD4EF6557180BD4C98192872BCFE3AF56E863C09DDD8BC1EC58DF9D94F914F0369102B2870BECFA1348A0838C9C49BD1C20124B442477572347047506B1FCD658A80D0C44BCC16BC5C5496CFE6E4A8428EF654CD3D8972BF6E5BFAD59C93006830B5EB1056BBB38B53D1464FA6E02BFDF2FF66CD949486F0775EC43034EC2602AEFBF1703AD221DAA2A88353C3B6A688EFE8387811F645CEED7B3FE46E1F8B9F59FAD028F349B9BC14211D5830994D055EEA3D547911E07A0ADDEB8A82B9188E58720D95CD478EEC9AF1F17BE8141BE80906F1A339445A7EB5B285F68039B0F294598A7D1C0005FC22B5271B0752F58CCDEF8C8FD856FB7AE21C80B8A2CE983AE94046E53EDE4CB89F42502D31B5360771C01C80155918637490550E3F555E2EE75CC8C636DDE3633CFEDD62E91BF0F7688273694EEEBA20C2FC9F14A2A435517BC1D7373922463409AB603295CEB0BB53787A334C9CA3CA8B30005C5A62FC0715083462E00719A8FA3ED0A9828C3871360A73F8B04A4FC1E71302844E9BB9940B77E745C9D91F226D71AFCAD4B113AAF68D92B24DDB4A2136B55A1CD1ADF39605B63CB639038ED0F4C987689866743A68769CC55847E4A06D6E2E3F1',
1091  exponent: '0x10001',
1092  pubkey: <Buffer ... >,
1093  valid_from: 'Aug 14 00:00:00 2017 GMT',
1094  valid_to: 'Nov 20 23:59:59 2019 GMT',
1095  fingerprint: '01:02:59:D9:C3:D2:0D:08:F7:82:4E:44:A4:B4:53:C5:E2:3A:87:4D',
1096  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',
1097  ext_key_usage: [ '1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2' ],
1098  serialNumber: '66593D57F20CBC573E433381B5FEC280',
1099  raw: <Buffer ... > }
1100```
1101
1102### `tlsSocket.getPeerFinished()`
1103<!-- YAML
1104added: v9.9.0
1105-->
1106
1107* Returns: {Buffer|undefined} The latest `Finished` message that is expected
1108or has actually been received from the socket as part of a SSL/TLS handshake,
1109or `undefined` if there is no `Finished` message so far.
1110
1111As the `Finished` messages are message digests of the complete handshake
1112(with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can
1113be used for external authentication procedures when the authentication
1114provided by SSL/TLS is not desired or is not enough.
1115
1116Corresponds to the `SSL_get_peer_finished` routine in OpenSSL and may be used
1117to implement the `tls-unique` channel binding from [RFC 5929][].
1118
1119### `tlsSocket.getProtocol()`
1120<!-- YAML
1121added: v5.7.0
1122-->
1123
1124* Returns: {string|null}
1125
1126Returns a string containing the negotiated SSL/TLS protocol version of the
1127current connection. The value `'unknown'` will be returned for connected
1128sockets that have not completed the handshaking process. The value `null` will
1129be returned for server sockets or disconnected client sockets.
1130
1131Protocol versions are:
1132
1133* `'SSLv3'`
1134* `'TLSv1'`
1135* `'TLSv1.1'`
1136* `'TLSv1.2'`
1137* `'TLSv1.3'`
1138
1139See the OpenSSL [`SSL_get_version`][] documentation for more information.
1140
1141### `tlsSocket.getSession()`
1142<!-- YAML
1143added: v0.11.4
1144-->
1145
1146* {Buffer}
1147
1148Returns the TLS session data or `undefined` if no session was
1149negotiated. On the client, the data can be provided to the `session` option of
1150[`tls.connect()`][] to resume the connection. On the server, it may be useful
1151for debugging.
1152
1153See [Session Resumption][] for more information.
1154
1155Note: `getSession()` works only for TLSv1.2 and below. For TLSv1.3, applications
1156must use the [`'session'`][] event (it also works for TLSv1.2 and below).
1157
1158### `tlsSocket.getSharedSigalgs()`
1159<!-- YAML
1160added: v12.11.0
1161-->
1162
1163* Returns: {Array} List of signature algorithms shared between the server and
1164the client in the order of decreasing preference.
1165
1166See
1167[SSL_get_shared_sigalgs](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_shared_sigalgs.html)
1168for more information.
1169
1170### `tlsSocket.exportKeyingMaterial(length, label[, context])`
1171<!-- YAML
1172added: v12.17.0
1173-->
1174
1175* `length` {number} number of bytes to retrieve from keying material
1176* `label` {string} an application specific label, typically this will be a
1177value from the
1178[IANA Exporter Label Registry](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels).
1179* `context` {Buffer} Optionally provide a context.
1180
1181* Returns: {Buffer} requested bytes of the keying material
1182
1183Keying material is used for validations to prevent different kind of attacks in
1184network protocols, for example in the specifications of IEEE 802.1X.
1185
1186Example
1187
1188```js
1189const keyingMaterial = tlsSocket.exportKeyingMaterial(
1190  128,
1191  'client finished');
1192
1193/**
1194 Example return value of keyingMaterial:
1195 <Buffer 76 26 af 99 c5 56 8e 42 09 91 ef 9f 93 cb ad 6c 7b 65 f8 53 f1 d8 d9
1196    12 5a 33 b8 b5 25 df 7b 37 9f e0 e2 4f b8 67 83 a3 2f cd 5d 41 42 4c 91
1197    74 ef 2c ... 78 more bytes>
1198*/
1199```
1200See the OpenSSL [`SSL_export_keying_material`][] documentation for more
1201information.
1202
1203### `tlsSocket.getTLSTicket()`
1204<!-- YAML
1205added: v0.11.4
1206-->
1207
1208* {Buffer}
1209
1210For a client, returns the TLS session ticket if one is available, or
1211`undefined`. For a server, always returns `undefined`.
1212
1213It may be useful for debugging.
1214
1215See [Session Resumption][] for more information.
1216
1217### `tlsSocket.isSessionReused()`
1218<!-- YAML
1219added: v0.5.6
1220-->
1221
1222* Returns: {boolean} `true` if the session was reused, `false` otherwise.
1223
1224See [Session Resumption][] for more information.
1225
1226### `tlsSocket.localAddress`
1227<!-- YAML
1228added: v0.11.4
1229-->
1230
1231* {string}
1232
1233Returns the string representation of the local IP address.
1234
1235### `tlsSocket.localPort`
1236<!-- YAML
1237added: v0.11.4
1238-->
1239
1240* {number}
1241
1242Returns the numeric representation of the local port.
1243
1244### `tlsSocket.remoteAddress`
1245<!-- YAML
1246added: v0.11.4
1247-->
1248
1249* {string}
1250
1251Returns the string representation of the remote IP address. For example,
1252`'74.125.127.100'` or `'2001:4860:a005::68'`.
1253
1254### `tlsSocket.remoteFamily`
1255<!-- YAML
1256added: v0.11.4
1257-->
1258
1259* {string}
1260
1261Returns the string representation of the remote IP family. `'IPv4'` or `'IPv6'`.
1262
1263### `tlsSocket.remotePort`
1264<!-- YAML
1265added: v0.11.4
1266-->
1267
1268* {number}
1269
1270Returns the numeric representation of the remote port. For example, `443`.
1271
1272### `tlsSocket.renegotiate(options, callback)`
1273<!-- YAML
1274added: v0.11.8
1275-->
1276
1277* `options` {Object}
1278  * `rejectUnauthorized` {boolean} If not `false`, the server certificate is
1279    verified against the list of supplied CAs. An `'error'` event is emitted if
1280    verification fails; `err.code` contains the OpenSSL error code. **Default:**
1281    `true`.
1282  * `requestCert`
1283* `callback` {Function} If `renegotiate()` returned `true`, callback is
1284   attached once to the `'secure'` event. If `renegotiate()` returned `false`,
1285   `callback` will be called in the next tick with an error, unless the
1286   `tlsSocket` has been destroyed, in which case `callback` will not be called
1287   at all.
1288
1289* Returns: {boolean} `true` if renegotiation was initiated, `false` otherwise.
1290
1291The `tlsSocket.renegotiate()` method initiates a TLS renegotiation process.
1292Upon completion, the `callback` function will be passed a single argument
1293that is either an `Error` (if the request failed) or `null`.
1294
1295This method can be used to request a peer's certificate after the secure
1296connection has been established.
1297
1298When running as the server, the socket will be destroyed with an error after
1299`handshakeTimeout` timeout.
1300
1301For TLSv1.3, renegotiation cannot be initiated, it is not supported by the
1302protocol.
1303
1304### `tlsSocket.setMaxSendFragment(size)`
1305<!-- YAML
1306added: v0.11.11
1307-->
1308
1309* `size` {number} The maximum TLS fragment size. The maximum value is `16384`.
1310  **Default:** `16384`.
1311* Returns: {boolean}
1312
1313The `tlsSocket.setMaxSendFragment()` method sets the maximum TLS fragment size.
1314Returns `true` if setting the limit succeeded; `false` otherwise.
1315
1316Smaller fragment sizes decrease the buffering latency on the client: larger
1317fragments are buffered by the TLS layer until the entire fragment is received
1318and its integrity is verified; large fragments can span multiple roundtrips
1319and their processing can be delayed due to packet loss or reordering. However,
1320smaller fragments add extra TLS framing bytes and CPU overhead, which may
1321decrease overall server throughput.
1322
1323## `tls.checkServerIdentity(hostname, cert)`
1324<!-- YAML
1325added: v0.8.4
1326-->
1327
1328* `hostname` {string} The host name or IP address to verify the certificate
1329  against.
1330* `cert` {Object} A [certificate object][] representing the peer's certificate.
1331* Returns: {Error|undefined}
1332
1333Verifies the certificate `cert` is issued to `hostname`.
1334
1335Returns {Error} object, populating it with `reason`, `host`, and `cert` on
1336failure. On success, returns {undefined}.
1337
1338This function can be overwritten by providing alternative function as part of
1339the `options.checkServerIdentity` option passed to `tls.connect()`. The
1340overwriting function can call `tls.checkServerIdentity()` of course, to augment
1341the checks done with additional verification.
1342
1343This function is only called if the certificate passed all other checks, such as
1344being issued by trusted CA (`options.ca`).
1345
1346## `tls.connect(options[, callback])`
1347<!-- YAML
1348added: v0.11.3
1349changes:
1350  - version: v12.16.0
1351    pr-url: https://github.com/nodejs/node/pull/23188
1352    description: The `pskCallback` option is now supported.
1353  - version: v12.9.0
1354    pr-url: https://github.com/nodejs/node/pull/27836
1355    description: Support the `allowHalfOpen` option.
1356  - version: v12.4.0
1357    pr-url: https://github.com/nodejs/node/pull/27816
1358    description: The `hints` option is now supported.
1359  - version: v12.2.0
1360    pr-url: https://github.com/nodejs/node/pull/27497
1361    description: The `enableTrace` option is now supported.
1362  - version: v11.8.0
1363    pr-url: https://github.com/nodejs/node/pull/25517
1364    description: The `timeout` option is supported now.
1365  - version: v8.0.0
1366    pr-url: https://github.com/nodejs/node/pull/12839
1367    description: The `lookup` option is supported now.
1368  - version: v8.0.0
1369    pr-url: https://github.com/nodejs/node/pull/11984
1370    description: The `ALPNProtocols` option can be a `TypedArray` or
1371     `DataView` now.
1372  - version: v5.3.0, v4.7.0
1373    pr-url: https://github.com/nodejs/node/pull/4246
1374    description: The `secureContext` option is supported now.
1375  - version: v5.0.0
1376    pr-url: https://github.com/nodejs/node/pull/2564
1377    description: ALPN options are supported now.
1378-->
1379
1380* `options` {Object}
1381  * `enableTrace`: See [`tls.createServer()`][]
1382  * `host` {string} Host the client should connect to. **Default:**
1383    `'localhost'`.
1384  * `port` {number} Port the client should connect to.
1385  * `path` {string} Creates Unix socket connection to path. If this option is
1386    specified, `host` and `port` are ignored.
1387  * `socket` {stream.Duplex} Establish secure connection on a given socket
1388    rather than creating a new socket. Typically, this is an instance of
1389    [`net.Socket`][], but any `Duplex` stream is allowed.
1390    If this option is specified, `path`, `host` and `port` are ignored,
1391    except for certificate validation. Usually, a socket is already connected
1392    when passed to `tls.connect()`, but it can be connected later.
1393    Connection/disconnection/destruction of `socket` is the user's
1394    responsibility; calling `tls.connect()` will not cause `net.connect()` to be
1395    called.
1396  * `allowHalfOpen` {boolean} If the `socket` option is missing, indicates
1397    whether or not to allow the internally created socket to be half-open,
1398    otherwise the option is ignored. See the `allowHalfOpen` option of
1399    [`net.Socket`][] for details. **Default:** `false`.
1400  * `rejectUnauthorized` {boolean} If not `false`, the server certificate is
1401    verified against the list of supplied CAs. An `'error'` event is emitted if
1402    verification fails; `err.code` contains the OpenSSL error code. **Default:**
1403    `true`.
1404  * `pskCallback` {Function}
1405    * hint: {string} optional message sent from the server to help client
1406      decide which identity to use during negotiation.
1407      Always `null` if TLS 1.3 is used.
1408    * Returns: {Object} in the form
1409      `{ psk: <Buffer|TypedArray|DataView>, identity: <string> }`
1410      or `null` to stop the negotiation process. `psk` must be
1411      compatible with the selected cipher's digest.
1412      `identity` must use UTF-8 encoding.
1413    When negotiating TLS-PSK (pre-shared keys), this function is called
1414    with optional identity `hint` provided by the server or `null`
1415    in case of TLS 1.3 where `hint` was removed.
1416    It will be necessary to provide a custom `tls.checkServerIdentity()`
1417    for the connection as the default one will try to check host name/IP
1418    of the server against the certificate but that's not applicable for PSK
1419    because there won't be a certificate present.
1420    More information can be found in the [RFC 4279][].
1421  * `ALPNProtocols`: {string[]|Buffer[]|TypedArray[]|DataView[]|Buffer|
1422    TypedArray|DataView}
1423    An array of strings, `Buffer`s or `TypedArray`s or `DataView`s, or a
1424    single `Buffer` or `TypedArray` or `DataView` containing the supported ALPN
1425    protocols. `Buffer`s should have the format `[len][name][len][name]...`
1426    e.g. `'\x08http/1.1\x08http/1.0'`, where the `len` byte is the length of the
1427    next protocol name. Passing an array is usually much simpler, e.g.
1428    `['http/1.1', 'http/1.0']`. Protocols earlier in the list have higher
1429    preference than those later.
1430  * `servername`: {string} Server name for the SNI (Server Name Indication) TLS
1431    extension. It is the name of the host being connected to, and must be a host
1432    name, and not an IP address. It can be used by a multi-homed server to
1433    choose the correct certificate to present to the client, see the
1434    `SNICallback` option to [`tls.createServer()`][].
1435  * `checkServerIdentity(servername, cert)` {Function} A callback function
1436    to be used (instead of the builtin `tls.checkServerIdentity()` function)
1437    when checking the server's host name (or the provided `servername` when
1438    explicitly set) against the certificate. This should return an {Error} if
1439    verification fails. The method should return `undefined` if the `servername`
1440    and `cert` are verified.
1441  * `session` {Buffer} A `Buffer` instance, containing TLS session.
1442  * `minDHSize` {number} Minimum size of the DH parameter in bits to accept a
1443    TLS connection. When a server offers a DH parameter with a size less
1444    than `minDHSize`, the TLS connection is destroyed and an error is thrown.
1445    **Default:** `1024`.
1446  * `secureContext`: TLS context object created with
1447    [`tls.createSecureContext()`][]. If a `secureContext` is _not_ provided, one
1448    will be created by passing the entire `options` object to
1449    `tls.createSecureContext()`.
1450  * ...: [`tls.createSecureContext()`][] options that are used if the
1451    `secureContext` option is missing, otherwise they are ignored.
1452  * ...: Any [`socket.connect()`][] option not already listed.
1453* `callback` {Function}
1454* Returns: {tls.TLSSocket}
1455
1456The `callback` function, if specified, will be added as a listener for the
1457[`'secureConnect'`][] event.
1458
1459`tls.connect()` returns a [`tls.TLSSocket`][] object.
1460
1461Unlike the `https` API, `tls.connect()` does not enable the
1462SNI (Server Name Indication) extension by default, which may cause some
1463servers to return an incorrect certificate or reject the connection
1464altogether. To enable SNI, set the `servername` option in addition
1465to `host`.
1466
1467The following illustrates a client for the echo server example from
1468[`tls.createServer()`][]:
1469
1470```js
1471// Assumes an echo server that is listening on port 8000.
1472const tls = require('tls');
1473const fs = require('fs');
1474
1475const options = {
1476  // Necessary only if the server requires client certificate authentication.
1477  key: fs.readFileSync('client-key.pem'),
1478  cert: fs.readFileSync('client-cert.pem'),
1479
1480  // Necessary only if the server uses a self-signed certificate.
1481  ca: [ fs.readFileSync('server-cert.pem') ],
1482
1483  // Necessary only if the server's cert isn't for "localhost".
1484  checkServerIdentity: () => { return null; },
1485};
1486
1487const socket = tls.connect(8000, options, () => {
1488  console.log('client connected',
1489              socket.authorized ? 'authorized' : 'unauthorized');
1490  process.stdin.pipe(socket);
1491  process.stdin.resume();
1492});
1493socket.setEncoding('utf8');
1494socket.on('data', (data) => {
1495  console.log(data);
1496});
1497socket.on('end', () => {
1498  console.log('server ends connection');
1499});
1500```
1501
1502## `tls.connect(path[, options][, callback])`
1503<!-- YAML
1504added: v0.11.3
1505-->
1506
1507* `path` {string} Default value for `options.path`.
1508* `options` {Object} See [`tls.connect()`][].
1509* `callback` {Function} See [`tls.connect()`][].
1510* Returns: {tls.TLSSocket}
1511
1512Same as [`tls.connect()`][] except that `path` can be provided
1513as an argument instead of an option.
1514
1515A path option, if specified, will take precedence over the path argument.
1516
1517## `tls.connect(port[, host][, options][, callback])`
1518<!-- YAML
1519added: v0.11.3
1520-->
1521
1522* `port` {number} Default value for `options.port`.
1523* `host` {string} Default value for `options.host`.
1524* `options` {Object} See [`tls.connect()`][].
1525* `callback` {Function} See [`tls.connect()`][].
1526* Returns: {tls.TLSSocket}
1527
1528Same as [`tls.connect()`][] except that `port` and `host` can be provided
1529as arguments instead of options.
1530
1531A port or host option, if specified, will take precedence over any port or host
1532argument.
1533
1534## `tls.createSecureContext([options])`
1535<!-- YAML
1536added: v0.11.13
1537changes:
1538  - version: v12.12.0
1539    pr-url: https://github.com/nodejs/node/pull/28973
1540    description: Added `privateKeyIdentifier` and `privateKeyEngine` options
1541                 to get private key from an OpenSSL engine.
1542  - version: v12.11.0
1543    pr-url: https://github.com/nodejs/node/pull/29598
1544    description: Added `sigalgs` option to override supported signature
1545                 algorithms.
1546  - version: v12.0.0
1547    pr-url: https://github.com/nodejs/node/pull/26209
1548    description: TLSv1.3 support added.
1549  - version: v11.5.0
1550    pr-url: https://github.com/nodejs/node/pull/24733
1551    description: The `ca:` option now supports `BEGIN TRUSTED CERTIFICATE`.
1552  - version: v11.4.0
1553    pr-url: https://github.com/nodejs/node/pull/24405
1554    description: The `minVersion` and `maxVersion` can be used to restrict
1555                 the allowed TLS protocol versions.
1556  - version: v10.0.0
1557    pr-url: https://github.com/nodejs/node/pull/19794
1558    description: The `ecdhCurve` cannot be set to `false` anymore due to a
1559                 change in OpenSSL.
1560  - version: v9.3.0
1561    pr-url: https://github.com/nodejs/node/pull/14903
1562    description: The `options` parameter can now include `clientCertEngine`.
1563  - version: v9.0.0
1564    pr-url: https://github.com/nodejs/node/pull/15206
1565    description: The `ecdhCurve` option can now be multiple `':'` separated
1566                 curve names or `'auto'`.
1567  - version: v7.3.0
1568    pr-url: https://github.com/nodejs/node/pull/10294
1569    description: If the `key` option is an array, individual entries do not
1570                 need a `passphrase` property anymore. `Array` entries can also
1571                 just be `string`s or `Buffer`s now.
1572  - version: v5.2.0
1573    pr-url: https://github.com/nodejs/node/pull/4099
1574    description: The `ca` option can now be a single string containing multiple
1575                 CA certificates.
1576-->
1577
1578* `options` {Object}
1579  * `ca` {string|string[]|Buffer|Buffer[]} Optionally override the trusted CA
1580    certificates. Default is to trust the well-known CAs curated by Mozilla.
1581    Mozilla's CAs are completely replaced when CAs are explicitly specified
1582    using this option. The value can be a string or `Buffer`, or an `Array` of
1583    strings and/or `Buffer`s. Any string or `Buffer` can contain multiple PEM
1584    CAs concatenated together. The peer's certificate must be chainable to a CA
1585    trusted by the server for the connection to be authenticated. When using
1586    certificates that are not chainable to a well-known CA, the certificate's CA
1587    must be explicitly specified as a trusted or the connection will fail to
1588    authenticate.
1589    If the peer uses a certificate that doesn't match or chain to one of the
1590    default CAs, use the `ca` option to provide a CA certificate that the peer's
1591    certificate can match or chain to.
1592    For self-signed certificates, the certificate is its own CA, and must be
1593    provided.
1594    For PEM encoded certificates, supported types are "TRUSTED CERTIFICATE",
1595    "X509 CERTIFICATE", and "CERTIFICATE".
1596    See also [`tls.rootCertificates`][].
1597  * `cert` {string|string[]|Buffer|Buffer[]} Cert chains in PEM format. One cert
1598    chain should be provided per private key. Each cert chain should consist of
1599    the PEM formatted certificate for a provided private `key`, followed by the
1600    PEM formatted intermediate certificates (if any), in order, and not
1601    including the root CA (the root CA must be pre-known to the peer, see `ca`).
1602    When providing multiple cert chains, they do not have to be in the same
1603    order as their private keys in `key`. If the intermediate certificates are
1604    not provided, the peer will not be able to validate the certificate, and the
1605    handshake will fail.
1606  * `sigalgs` {string} Colon-separated list of supported signature algorithms.
1607    The list can contain digest algorithms (`SHA256`, `MD5` etc.), public key
1608    algorithms (`RSA-PSS`, `ECDSA` etc.), combination of both (e.g
1609    'RSA+SHA384') or TLS v1.3 scheme names (e.g. `rsa_pss_pss_sha512`).
1610    See [OpenSSL man pages](https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set1_sigalgs_list.html)
1611    for more info.
1612  * `ciphers` {string} Cipher suite specification, replacing the default. For
1613    more information, see [modifying the default cipher suite][]. Permitted
1614    ciphers can be obtained via [`tls.getCiphers()`][]. Cipher names must be
1615    uppercased in order for OpenSSL to accept them.
1616  * `clientCertEngine` {string} Name of an OpenSSL engine which can provide the
1617    client certificate.
1618  * `crl` {string|string[]|Buffer|Buffer[]} PEM formatted CRLs (Certificate
1619    Revocation Lists).
1620  * `dhparam` {string|Buffer} Diffie-Hellman parameters, required for
1621    [perfect forward secrecy][]. Use `openssl dhparam` to create the parameters.
1622    The key length must be greater than or equal to 1024 bits or else an error
1623    will be thrown. Although 1024 bits is permissible, use 2048 bits or larger
1624    for stronger security. If omitted or invalid, the parameters are silently
1625    discarded and DHE ciphers will not be available.
1626  * `ecdhCurve` {string} A string describing a named curve or a colon separated
1627    list of curve NIDs or names, for example `P-521:P-384:P-256`, to use for
1628    ECDH key agreement. Set to `auto` to select the
1629    curve automatically. Use [`crypto.getCurves()`][] to obtain a list of
1630    available curve names. On recent releases, `openssl ecparam -list_curves`
1631    will also display the name and description of each available elliptic curve.
1632    **Default:** [`tls.DEFAULT_ECDH_CURVE`][].
1633  * `honorCipherOrder` {boolean} Attempt to use the server's cipher suite
1634    preferences instead of the client's. When `true`, causes
1635    `SSL_OP_CIPHER_SERVER_PREFERENCE` to be set in `secureOptions`, see
1636    [OpenSSL Options][] for more information.
1637  * `key` {string|string[]|Buffer|Buffer[]|Object[]} Private keys in PEM format.
1638    PEM allows the option of private keys being encrypted. Encrypted keys will
1639    be decrypted with `options.passphrase`. Multiple keys using different
1640    algorithms can be provided either as an array of unencrypted key strings or
1641    buffers, or an array of objects in the form
1642    `{pem: <string|buffer>[, passphrase: <string>]}`. The object form can only
1643    occur in an array. `object.passphrase` is optional. Encrypted keys will be
1644    decrypted with `object.passphrase` if provided, or `options.passphrase` if
1645    it is not.
1646  * `privateKeyEngine` {string} Name of an OpenSSL engine to get private key
1647    from. Should be used together with `privateKeyIdentifier`.
1648  * `privateKeyIdentifier` {string} Identifier of a private key managed by
1649    an OpenSSL engine. Should be used together with `privateKeyEngine`.
1650    Should not be set together with `key`, because both options define a
1651    private key in different ways.
1652  * `maxVersion` {string} Optionally set the maximum TLS version to allow. One
1653    of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified
1654    along with the `secureProtocol` option, use one or the other.
1655    **Default:** [`tls.DEFAULT_MAX_VERSION`][].
1656  * `minVersion` {string} Optionally set the minimum TLS version to allow. One
1657    of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified
1658    along with the `secureProtocol` option, use one or the other. It is not
1659    recommended to use less than TLSv1.2, but it may be required for
1660    interoperability.
1661    **Default:** [`tls.DEFAULT_MIN_VERSION`][].
1662  * `passphrase` {string} Shared passphrase used for a single private key and/or
1663    a PFX.
1664  * `pfx` {string|string[]|Buffer|Buffer[]|Object[]} PFX or PKCS12 encoded
1665    private key and certificate chain. `pfx` is an alternative to providing
1666    `key` and `cert` individually. PFX is usually encrypted, if it is,
1667    `passphrase` will be used to decrypt it. Multiple PFX can be provided either
1668    as an array of unencrypted PFX buffers, or an array of objects in the form
1669    `{buf: <string|buffer>[, passphrase: <string>]}`. The object form can only
1670    occur in an array. `object.passphrase` is optional. Encrypted PFX will be
1671    decrypted with `object.passphrase` if provided, or `options.passphrase` if
1672    it is not.
1673  * `secureOptions` {number} Optionally affect the OpenSSL protocol behavior,
1674    which is not usually necessary. This should be used carefully if at all!
1675    Value is a numeric bitmask of the `SSL_OP_*` options from
1676    [OpenSSL Options][].
1677  * `secureProtocol` {string} Legacy mechanism to select the TLS protocol
1678    version to use, it does not support independent control of the minimum and
1679    maximum version, and does not support limiting the protocol to TLSv1.3. Use
1680    `minVersion` and `maxVersion` instead. The possible values are listed as
1681    [SSL_METHODS][], use the function names as strings. For example, use
1682    `'TLSv1_1_method'` to force TLS version 1.1, or `'TLS_method'` to allow any
1683    TLS protocol version up to TLSv1.3. It is not recommended to use TLS
1684    versions less than 1.2, but it may be required for interoperability.
1685    **Default:** none, see `minVersion`.
1686  * `sessionIdContext` {string} Opaque identifier used by servers to ensure
1687    session state is not shared between applications. Unused by clients.
1688  * `ticketKeys`: {Buffer} 48-bytes of cryptographically strong pseudo-random
1689    data. See [Session Resumption][] for more information.
1690  * `sessionTimeout` {number} The number of seconds after which a TLS session
1691    created by the server will no longer be resumable. See
1692    [Session Resumption][] for more information. **Default:** `300`.
1693
1694[`tls.createServer()`][] sets the default value of the `honorCipherOrder` option
1695to `true`, other APIs that create secure contexts leave it unset.
1696
1697[`tls.createServer()`][] uses a 128 bit truncated SHA1 hash value generated
1698from `process.argv` as the default value of the `sessionIdContext` option, other
1699APIs that create secure contexts have no default value.
1700
1701The `tls.createSecureContext()` method creates a `SecureContext` object. It is
1702usable as an argument to several `tls` APIs, such as [`tls.createServer()`][]
1703and [`server.addContext()`][], but has no public methods.
1704
1705A key is *required* for ciphers that use certificates. Either `key` or
1706`pfx` can be used to provide it.
1707
1708If the `ca` option is not given, then Node.js will default to using
1709[Mozilla's publicly trusted list of CAs][].
1710
1711## `tls.createSecurePair([context][, isServer][, requestCert][, rejectUnauthorized][, options])`
1712<!-- YAML
1713added: v0.3.2
1714deprecated: v0.11.3
1715changes:
1716  - version: v5.0.0
1717    pr-url: https://github.com/nodejs/node/pull/2564
1718    description: ALPN options are supported now.
1719-->
1720
1721> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead.
1722
1723* `context` {Object} A secure context object as returned by
1724  `tls.createSecureContext()`
1725* `isServer` {boolean} `true` to specify that this TLS connection should be
1726  opened as a server.
1727* `requestCert` {boolean} `true` to specify whether a server should request a
1728  certificate from a connecting client. Only applies when `isServer` is `true`.
1729* `rejectUnauthorized` {boolean} If not `false` a server automatically reject
1730  clients with invalid certificates. Only applies when `isServer` is `true`.
1731* `options`
1732  * `enableTrace`: See [`tls.createServer()`][]
1733  * `secureContext`: A TLS context object from [`tls.createSecureContext()`][]
1734  * `isServer`: If `true` the TLS socket will be instantiated in server-mode.
1735    **Default:** `false`.
1736  * `server` {net.Server} A [`net.Server`][] instance
1737  * `requestCert`: See [`tls.createServer()`][]
1738  * `rejectUnauthorized`: See [`tls.createServer()`][]
1739  * `ALPNProtocols`: See [`tls.createServer()`][]
1740  * `SNICallback`: See [`tls.createServer()`][]
1741  * `session` {Buffer} A `Buffer` instance containing a TLS session.
1742  * `requestOCSP` {boolean} If `true`, specifies that the OCSP status request
1743    extension will be added to the client hello and an `'OCSPResponse'` event
1744    will be emitted on the socket before establishing a secure communication.
1745
1746Creates a new secure pair object with two streams, one of which reads and writes
1747the encrypted data and the other of which reads and writes the cleartext data.
1748Generally, the encrypted stream is piped to/from an incoming encrypted data
1749stream and the cleartext one is used as a replacement for the initial encrypted
1750stream.
1751
1752`tls.createSecurePair()` returns a `tls.SecurePair` object with `cleartext` and
1753`encrypted` stream properties.
1754
1755Using `cleartext` has the same API as [`tls.TLSSocket`][].
1756
1757The `tls.createSecurePair()` method is now deprecated in favor of
1758`tls.TLSSocket()`. For example, the code:
1759
1760```js
1761pair = tls.createSecurePair(/* ... */);
1762pair.encrypted.pipe(socket);
1763socket.pipe(pair.encrypted);
1764```
1765
1766can be replaced by:
1767
1768```js
1769secureSocket = tls.TLSSocket(socket, options);
1770```
1771
1772where `secureSocket` has the same API as `pair.cleartext`.
1773
1774## `tls.createServer([options][, secureConnectionListener])`
1775<!-- YAML
1776added: v0.3.2
1777changes:
1778  - version: v12.3.0
1779    pr-url: https://github.com/nodejs/node/pull/27665
1780    description: The `options` parameter now supports `net.createServer()`
1781                 options.
1782  - version: v9.3.0
1783    pr-url: https://github.com/nodejs/node/pull/14903
1784    description: The `options` parameter can now include `clientCertEngine`.
1785  - version: v8.0.0
1786    pr-url: https://github.com/nodejs/node/pull/11984
1787    description: The `ALPNProtocols` option can be a `TypedArray` or
1788     `DataView` now.
1789  - version: v5.0.0
1790    pr-url: https://github.com/nodejs/node/pull/2564
1791    description: ALPN options are supported now.
1792-->
1793
1794* `options` {Object}
1795  * `ALPNProtocols`: {string[]|Buffer[]|TypedArray[]|DataView[]|Buffer|
1796    TypedArray|DataView}
1797    An array of strings, `Buffer`s or `TypedArray`s or `DataView`s, or a single
1798    `Buffer` or `TypedArray` or `DataView` containing the supported ALPN
1799    protocols. `Buffer`s should have the format `[len][name][len][name]...`
1800    e.g. `0x05hello0x05world`, where the first byte is the length of the next
1801    protocol name. Passing an array is usually much simpler, e.g.
1802    `['hello', 'world']`. (Protocols should be ordered by their priority.)
1803  * `clientCertEngine` {string} Name of an OpenSSL engine which can provide the
1804    client certificate.
1805  * `enableTrace` {boolean} If `true`, [`tls.TLSSocket.enableTrace()`][] will be
1806    called on new connections. Tracing can be enabled after the secure
1807    connection is established, but this option must be used to trace the secure
1808    connection setup. **Default:** `false`.
1809  * `handshakeTimeout` {number} Abort the connection if the SSL/TLS handshake
1810    does not finish in the specified number of milliseconds.
1811    A `'tlsClientError'` is emitted on the `tls.Server` object whenever
1812    a handshake times out. **Default:** `120000` (120 seconds).
1813  * `rejectUnauthorized` {boolean} If not `false` the server will reject any
1814    connection which is not authorized with the list of supplied CAs. This
1815    option only has an effect if `requestCert` is `true`. **Default:** `true`.
1816  * `requestCert` {boolean} If `true` the server will request a certificate from
1817    clients that connect and attempt to verify that certificate. **Default:**
1818    `false`.
1819  * `sessionTimeout` {number} The number of seconds after which a TLS session
1820    created by the server will no longer be resumable. See
1821    [Session Resumption][] for more information. **Default:** `300`.
1822  * `SNICallback(servername, callback)` {Function} A function that will be
1823    called if the client supports SNI TLS extension. Two arguments will be
1824    passed when called: `servername` and `callback`. `callback` is an
1825    error-first callback that takes two optional arguments: `error` and `ctx`.
1826    `ctx`, if provided, is a `SecureContext` instance.
1827    [`tls.createSecureContext()`][] can be used to get a proper `SecureContext`.
1828    If `callback` is called with a falsy `ctx` argument, the default secure
1829    context of the server will be used. If `SNICallback` wasn't provided the
1830    default callback with high-level API will be used (see below).
1831  * `ticketKeys`: {Buffer} 48-bytes of cryptographically strong pseudo-random
1832    data. See [Session Resumption][] for more information.
1833  * `pskCallback` {Function}
1834    * socket: {tls.TLSSocket} the server [`tls.TLSSocket`][] instance for
1835      this connection.
1836    * identity: {string} identity parameter sent from the client.
1837    * Returns: {Buffer|TypedArray|DataView} pre-shared key that must either be
1838      a buffer or `null` to stop the negotiation process. Returned PSK must be
1839      compatible with the selected cipher's digest.
1840    When negotiating TLS-PSK (pre-shared keys), this function is called
1841    with the identity provided by the client.
1842    If the return value is `null` the negotiation process will stop and an
1843    "unknown_psk_identity" alert message will be sent to the other party.
1844    If the server wishes to hide the fact that the PSK identity was not known,
1845    the callback must provide some random data as `psk` to make the connection
1846    fail with "decrypt_error" before negotiation is finished.
1847    PSK ciphers are disabled by default, and using TLS-PSK thus
1848    requires explicitly specifying a cipher suite with the `ciphers` option.
1849    More information can be found in the [RFC 4279][].
1850  * `pskIdentityHint` {string} optional hint to send to a client to help
1851    with selecting the identity during TLS-PSK negotiation. Will be ignored
1852    in TLS 1.3. Upon failing to set pskIdentityHint `'tlsClientError'` will be
1853    emitted with `'ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED'` code.
1854  * ...: Any [`tls.createSecureContext()`][] option can be provided. For
1855    servers, the identity options (`pfx`, `key`/`cert` or `pskCallback`)
1856    are usually required.
1857  * ...: Any [`net.createServer()`][] option can be provided.
1858* `secureConnectionListener` {Function}
1859* Returns: {tls.Server}
1860
1861Creates a new [`tls.Server`][]. The `secureConnectionListener`, if provided, is
1862automatically set as a listener for the [`'secureConnection'`][] event.
1863
1864The `ticketKeys` options is automatically shared between `cluster` module
1865workers.
1866
1867The following illustrates a simple echo server:
1868
1869```js
1870const tls = require('tls');
1871const fs = require('fs');
1872
1873const options = {
1874  key: fs.readFileSync('server-key.pem'),
1875  cert: fs.readFileSync('server-cert.pem'),
1876
1877  // This is necessary only if using client certificate authentication.
1878  requestCert: true,
1879
1880  // This is necessary only if the client uses a self-signed certificate.
1881  ca: [ fs.readFileSync('client-cert.pem') ]
1882};
1883
1884const server = tls.createServer(options, (socket) => {
1885  console.log('server connected',
1886              socket.authorized ? 'authorized' : 'unauthorized');
1887  socket.write('welcome!\n');
1888  socket.setEncoding('utf8');
1889  socket.pipe(socket);
1890});
1891server.listen(8000, () => {
1892  console.log('server bound');
1893});
1894```
1895
1896The server can be tested by connecting to it using the example client from
1897[`tls.connect()`][].
1898
1899## `tls.getCiphers()`
1900<!-- YAML
1901added: v0.10.2
1902-->
1903
1904* Returns: {string[]}
1905
1906Returns an array with the names of the supported TLS ciphers. The names are
1907lower-case for historical reasons, but must be uppercased to be used in
1908the `ciphers` option of [`tls.createSecureContext()`][].
1909
1910Cipher names that start with `'tls_'` are for TLSv1.3, all the others are for
1911TLSv1.2 and below.
1912
1913```js
1914console.log(tls.getCiphers()); // ['aes128-gcm-sha256', 'aes128-sha', ...]
1915```
1916
1917## `tls.rootCertificates`
1918<!-- YAML
1919added: v12.3.0
1920-->
1921
1922* {string[]}
1923
1924An immutable array of strings representing the root certificates (in PEM format)
1925from the bundled Mozilla CA store as supplied by current Node.js version.
1926
1927The bundled CA store, as supplied by Node.js, is a snapshot of Mozilla CA store
1928that is fixed at release time. It is identical on all supported platforms.
1929
1930## `tls.DEFAULT_ECDH_CURVE`
1931<!-- YAML
1932added: v0.11.13
1933changes:
1934  - version: v10.0.0
1935    pr-url: https://github.com/nodejs/node/pull/16853
1936    description: Default value changed to `'auto'`.
1937-->
1938
1939The default curve name to use for ECDH key agreement in a tls server. The
1940default value is `'auto'`. See [`tls.createSecureContext()`][] for further
1941information.
1942
1943## `tls.DEFAULT_MAX_VERSION`
1944<!-- YAML
1945added: v11.4.0
1946-->
1947
1948* {string} The default value of the `maxVersion` option of
1949  [`tls.createSecureContext()`][]. It can be assigned any of the supported TLS
1950  protocol versions, `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`.
1951  **Default:** `'TLSv1.3'`, unless changed using CLI options. Using
1952  `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets
1953  the default to `'TLSv1.3'`. If multiple of the options are provided, the
1954  highest maximum is used.
1955
1956## `tls.DEFAULT_MIN_VERSION`
1957<!-- YAML
1958added: v11.4.0
1959-->
1960
1961* {string} The default value of the `minVersion` option of
1962  [`tls.createSecureContext()`][]. It can be assigned any of the supported TLS
1963  protocol versions, `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`.
1964  **Default:** `'TLSv1.2'`, unless changed using CLI options. Using
1965  `--tls-min-v1.0` sets the default to `'TLSv1'`. Using `--tls-min-v1.1` sets
1966  the default to `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to
1967  `'TLSv1.3'`. If multiple of the options are provided, the lowest minimum is
1968  used.
1969
1970[`'newSession'`]: #tls_event_newsession
1971[`'resumeSession'`]: #tls_event_resumesession
1972[`'secureConnect'`]: #tls_event_secureconnect
1973[`'secureConnection'`]: #tls_event_secureconnection
1974[`'session'`]: #tls_event_session
1975[`--tls-cipher-list`]: cli.html#cli_tls_cipher_list_list
1976[`NODE_OPTIONS`]: cli.html#cli_node_options_options
1977[`SSL_export_keying_material`]: https://www.openssl.org/docs/man1.1.1/man3/SSL_export_keying_material.html
1978[`SSL_get_version`]: https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html
1979[`crypto.getCurves()`]: crypto.html#crypto_crypto_getcurves
1980[`Duplex`]: stream.html#stream_class_stream_duplex
1981[`net.createServer()`]: net.html#net_net_createserver_options_connectionlistener
1982[`net.Server.address()`]: net.html#net_server_address
1983[`net.Server`]: net.html#net_class_net_server
1984[`net.Socket`]: net.html#net_class_net_socket
1985[`server.addContext()`]: #tls_server_addcontext_hostname_context
1986[`server.getConnections()`]: net.html#net_server_getconnections_callback
1987[`server.getTicketKeys()`]: #tls_server_getticketkeys
1988[`server.listen()`]: net.html#net_server_listen
1989[`server.setTicketKeys()`]: #tls_server_setticketkeys_keys
1990[`socket.connect()`]: net.html#net_socket_connect_options_connectlistener
1991[`tls.DEFAULT_ECDH_CURVE`]: #tls_tls_default_ecdh_curve
1992[`tls.DEFAULT_MAX_VERSION`]: #tls_tls_default_max_version
1993[`tls.DEFAULT_MIN_VERSION`]: #tls_tls_default_min_version
1994[`tls.Server`]: #tls_class_tls_server
1995[`tls.TLSSocket.enableTrace()`]: #tls_tlssocket_enabletrace
1996[`tls.TLSSocket.getPeerCertificate()`]: #tls_tlssocket_getpeercertificate_detailed
1997[`tls.TLSSocket.getSession()`]: #tls_tlssocket_getsession
1998[`tls.TLSSocket.getTLSTicket()`]: #tls_tlssocket_gettlsticket
1999[`tls.TLSSocket`]: #tls_class_tls_tlssocket
2000[`tls.connect()`]: #tls_tls_connect_options_callback
2001[`tls.createSecureContext()`]: #tls_tls_createsecurecontext_options
2002[`tls.createSecurePair()`]: #tls_tls_createsecurepair_context_isserver_requestcert_rejectunauthorized_options
2003[`tls.createServer()`]: #tls_tls_createserver_options_secureconnectionlistener
2004[`tls.getCiphers()`]: #tls_tls_getciphers
2005[`tls.rootCertificates`]: #tls_tls_rootcertificates
2006[Chrome's 'modern cryptography' setting]: https://www.chromium.org/Home/chromium-security/education/tls#TOC-Cipher-Suites
2007[DHE]: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
2008[ECDHE]: https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman
2009[forward secrecy]: https://en.wikipedia.org/wiki/Perfect_forward_secrecy
2010[Mozilla's publicly trusted list of CAs]: https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt
2011[OCSP request]: https://en.wikipedia.org/wiki/OCSP_stapling
2012[OpenSSL Options]: crypto.html#crypto_openssl_options
2013[perfect forward secrecy]: #tls_perfect_forward_secrecy
2014[RFC 2246]: https://www.ietf.org/rfc/rfc2246.txt
2015[RFC 5077]: https://tools.ietf.org/html/rfc5077
2016[RFC 5929]: https://tools.ietf.org/html/rfc5929
2017[SSL_METHODS]: https://www.openssl.org/docs/man1.1.1/man7/ssl.html#Dealing-with-Protocol-Methods
2018[Session Resumption]: #tls_session_resumption
2019[Stream]: stream.html#stream_stream
2020[TLS recommendations]: https://wiki.mozilla.org/Security/Server_Side_TLS
2021[asn1.js]: https://www.npmjs.com/package/asn1.js
2022[certificate object]: #tls_certificate_object
2023[cipher list format]: https://www.openssl.org/docs/man1.1.1/man1/ciphers.html#CIPHER-LIST-FORMAT
2024[modifying the default cipher suite]: #tls_modifying_the_default_tls_cipher_suite
2025[specific attacks affecting larger AES key sizes]: https://www.schneier.com/blog/archives/2009/07/another_new_aes.html
2026[RFC 4279]: https://tools.ietf.org/html/rfc4279
2027[RFC 4086]: https://tools.ietf.org/html/rfc4086
2028