From a22c9c4f42c7c213f1c65121af9d1357bfdf9bff Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 18 Jul 2025 17:24:41 +0200 Subject: [PATCH 1/2] doc: update release key for aduh95 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/58877 Reviewed-By: LiviaMedeiros Reviewed-By: James M Snell Reviewed-By: Marco Ippolito Reviewed-By: Richard Lau Reviewed-By: Ulises Gascón Reviewed-By: Ruy Adorno Reviewed-By: Rafael Gonzaga --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c9a7e9e0eb0a22..375de75dd97540 100644 --- a/README.md +++ b/README.md @@ -790,7 +790,7 @@ responding to new issues. Primary GPG keys for Node.js Releasers (some Releasers sign with subkeys): * **Antoine du Hamel** <> - `C0D6248439F1D5604AAFFB4021D900FFDB233756` + `5BE8A3F6C8A5C01D106C0AD820B1A390B168D356` * **Juan José Arboleda** <> `DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7` * **Marco Ippolito** <> @@ -810,7 +810,7 @@ To import the full set of trusted release keys (including subkeys possibly used to sign releases): ```bash -gpg --keyserver hkps://keys.openpgp.org --recv-keys C0D6248439F1D5604AAFFB4021D900FFDB233756 # Antoine du Hamel +gpg --keyserver hkps://keys.openpgp.org --recv-keys 5BE8A3F6C8A5C01D106C0AD820B1A390B168D356 # Antoine du Hamel gpg --keyserver hkps://keys.openpgp.org --recv-keys DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 # Juan José Arboleda gpg --keyserver hkps://keys.openpgp.org --recv-keys CC68F5A3106FF448322E48ED27F5E38D5B0A215F # Marco Ippolito gpg --keyserver hkps://keys.openpgp.org --recv-keys 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 # Michaël Zasso @@ -827,6 +827,8 @@ verify a downloaded file. Other keys used to sign some previous releases +* **Antoine du Hamel** <> + `C0D6248439F1D5604AAFFB4021D900FFDB233756` * **Beth Griggs** <> `4ED778F539E3634C779C87C6D7062848A1AB005C` * **Bryan English** <> From edd66d0130714cb0ac4c6038965f15d0bd25cb8a Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Fri, 18 Jul 2025 21:57:53 +0200 Subject: [PATCH 2/2] crypto: add tls.setDefaultCACertificates() This API allows dynamically configuring CA certificates that will be used by the Node.js TLS clients by default. Once called, the provided certificates will become the default CA certificate list returned by `tls.getCACertificates('default')` and used by TLS connections that don't specify their own CA certificates. This function only affects the current Node.js thread. PR-URL: https://github.com/nodejs/node/pull/58822 Reviewed-By: Matteo Collina Reviewed-By: Tim Perry Reviewed-By: Ethan Arrowood --- doc/api/tls.md | 48 +++++ lib/tls.js | 32 +++ src/crypto/crypto_context.cc | 196 ++++++++++++++++-- test/common/tls.js | 32 +++ .../es-modules/custom-condition/load.cjs | 6 + test/fixtures/tls-extra-ca-override.js | 50 +++++ ...t-default-ca-certificates-append-fetch.mjs | 54 +++++ ...lt-ca-certificates-append-https-request.js | 71 +++++++ ...et-default-ca-certificates-array-buffer.js | 39 ++++ ...t-tls-set-default-ca-certificates-basic.js | 58 ++++++ ...t-tls-set-default-ca-certificates-error.js | 41 ++++ ...-default-ca-certificates-extra-override.js | 19 ++ ...set-default-ca-certificates-mixed-types.js | 46 ++++ ...ault-ca-certificates-precedence-bundled.js | 53 +++++ ...efault-ca-certificates-precedence-empty.js | 51 +++++ ...ls-set-default-ca-certificates-recovery.js | 43 ++++ ...et-default-ca-certificates-reset-fetch.mjs | 47 +++++ ...ult-ca-certificates-reset-https-request.js | 62 ++++++ ...fault-ca-certificates-append-system-ca.mjs | 49 +++++ ...efault-ca-certificates-override-system.mjs | 87 ++++++++ ...ult-ca-certificates-system-combinations.js | 58 ++++++ 21 files changed, 1128 insertions(+), 14 deletions(-) create mode 100644 test/fixtures/es-modules/custom-condition/load.cjs create mode 100644 test/fixtures/tls-extra-ca-override.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-append-fetch.mjs create mode 100644 test/parallel/test-tls-set-default-ca-certificates-append-https-request.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-array-buffer.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-basic.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-error.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-extra-override.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-mixed-types.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-precedence-bundled.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-precedence-empty.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-recovery.js create mode 100644 test/parallel/test-tls-set-default-ca-certificates-reset-fetch.mjs create mode 100644 test/parallel/test-tls-set-default-ca-certificates-reset-https-request.js create mode 100644 test/system-ca/test-set-default-ca-certificates-append-system-ca.mjs create mode 100644 test/system-ca/test-set-default-ca-certificates-override-system.mjs create mode 100644 test/system-ca/test-set-default-ca-certificates-system-combinations.js diff --git a/doc/api/tls.md b/doc/api/tls.md index 5fde522dc9ae31..7be5ee7fb29a56 100644 --- a/doc/api/tls.md +++ b/doc/api/tls.md @@ -2260,6 +2260,54 @@ openssl pkcs12 -certpbe AES-256-CBC -export -out client-cert.pem \ The server can be tested by connecting to it using the example client from [`tls.connect()`][]. +## `tls.setDefaultCACertificates(certs)` + + + +* `certs` {string\[]|ArrayBufferView\[]} An array of CA certificates in PEM format. + +Sets the default CA certificates used by Node.js TLS clients. If the provided +certificates are parsed successfully, they will become the default CA +certificate list returned by [`tls.getCACertificates()`][] and used +by subsequent TLS connections that don't specify their own CA certificates. +The certificates will be deduplicated before being set as the default. + +This function only affects the current Node.js thread. Previous +sessions cached by the HTTPS agent won't be affected by this change, so +this method should be called before any unwanted cachable TLS connections are +made. + +To use system CA certificates as the default: + +```cjs +const tls = require('node:tls'); +tls.setDefaultCACertificates(tls.getCACertificates('system')); +``` + +```mjs +import tls from 'node:tls'; +tls.setDefaultCACertificates(tls.getCACertificates('system')); +``` + +This function completely replaces the default CA certificate list. To add additional +certificates to the existing defaults, get the current certificates and append to them: + +```cjs +const tls = require('node:tls'); +const currentCerts = tls.getCACertificates('default'); +const additionalCerts = ['-----BEGIN CERTIFICATE-----\n...']; +tls.setDefaultCACertificates([...currentCerts, ...additionalCerts]); +``` + +```mjs +import tls from 'node:tls'; +const currentCerts = tls.getCACertificates('default'); +const additionalCerts = ['-----BEGIN CERTIFICATE-----\n...']; +tls.setDefaultCACertificates([...currentCerts, ...additionalCerts]); +``` + ## `tls.getCACertificates([type])`