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