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