crypto,build: require OpenSSL 3, drop the bundled FIPS provider build - #64777
Draft
panva wants to merge 10 commits into
Draft
crypto,build: require OpenSSL 3, drop the bundled FIPS provider build#64777panva wants to merge 10 commits into
panva wants to merge 10 commits into
Conversation
Collaborator
|
Review requested:
|
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
panva
force-pushed
the
drop-openssl1
branch
2 times, most recently
from
August 5, 2026 20:11
92fef82 to
518c70f
Compare
aduh95
reviewed
Aug 7, 2026
panva
force-pushed
the
drop-openssl1
branch
2 times, most recently
from
August 22, 2026 11:07
b9cbc63 to
f8a4830
Compare
anonrig
approved these changes
Aug 22, 2026
Member
Author
|
@nodejs/tsc given the move to OpenSSL 4.x during 27.x alphas (nodejs/TSC#1869) I'd like to request an exception to the deprecation process and accelerate DEP0183 (OpenSSL engine-based APIs) on 27.x from Documentation-only straight to EOL instead of just Runtime (#63966). With OpenSSL 4.x (which drops engine support) we'd only be carrying forward engine support for the sake of shared openssl configurations and deployments that aren't using OpenSSL 4.x yet. |
This was referenced Aug 23, 2026
anonrig
approved these changes
Aug 23, 2026
configure now fails when --shared-openssl points at OpenSSL 1.x rather than failing later at compile or link time. The check skips BoringSSL, whose version macros claim 1.1.1. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
Remove the OpenSSL 1.x backend. Rename the provider-backed path switch to NCRYPTO_USE_OPENSSL_PROVIDER and rewrite the remaining version guards as OPENSSL_IS_BORINGSSL checks. BoringSSL continues to use the legacy low-level key paths. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
Remove the OpenSSL 1.x branches from src/. BoringSSL does not define OPENSSL_VERSION_MAJOR, so the remaining version guards were excluding it as well; use OPENSSL_IS_BORINGSSL checks instead. Make the OpenSSL legacy-provider command-line help version-neutral. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
Delete test-crypto-ecb.js, which can no longer run anywhere: Blowfish is available only from OpenSSL's legacy provider and is absent from BoringSSL. The addon and cctest version guards become OPENSSL_IS_BORINGSSL checks. Provider-only test skips use version-neutral terminology or state the actual minimum OpenSSL version. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
Rename the openssl30 footnote, which marks APIs unavailable on BoringSSL rather than ones requiring OpenSSL. Remove obsolete version qualifiers from the provider and FIPS documentation, drop the "As of OpenSSL 1.1.0" anchor from the PSK size limits, and point the man1.1.1 links at man3.0. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
The openssl_fips_*.cnf fixtures use OpenSSL 1.x syntax and are unused, get_env_type() sniffed for a "-fips" version suffix that can no longer occur, and the crypto-check lint rule listed a helper that no longer exists. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
--openssl-is-fips with bundled OpenSSL never worked: the openssl-fipsmodule target had no dependency edge, so fipsinstall's input was produced by nothing. Repairing it would not help, since a FIPS provider built out of tree has no validation status. Remove the machinery and restrict --openssl-is-fips to --shared-openssl. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
… (DEP0183)" This reverts commit da51692. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
OpenSSL removed support for engines in version 4. Remove the Node.js APIs, constants, native bindings, and implementation that depend on ENGINE. Keep recognizing the former TLS and HTTPS engine options so their use fails explicitly instead of appearing to work while being ignored. Move DEP0183 directly from Documentation-only to End-of-Life. Signed-off-by: Filip Skokan <panva.ip@gmail.com> Assisted-by: Codex
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Important
Prior to marking this ready for review, or more specifically, running a full CI, a change similar to nodejs/build#4386 needs to land to exclude OpenSSL 1.1.1 builds for
gte(27)(nodejs/build#4409).This will hang around as draft for comments until we get to v27.x alphas
Drops support for building against OpenSSL 1.x, and with it a FIPS build path that never worked. #64211 split the native crypto backends so this could be a focused follow-up.
configurenow fails when--shared-opensslpoints at anything older than 3.0.0, instead of failing later at compile or link time. The check skips BoringSSL, whose version macros claim 1.1.1.crypto.fipsis removed. It was runtime-deprecated as DEP0093 in v23.0.0 and has an automated migration.crypto.getFips()andcrypto.setFips()are unaffected.--openssl-is-fipsnow requires--shared-openssl, since with the bundled OpenSSL it no longer has anything to configure.--openssl-is-fipsagainst the bundled OpenSSL never worked.openssl-fipsmodulehas no dependency edge fromnode.gyp, so gyp emitted no rules for it andfipsinstall's input was produced by nothing. The edge was commented out in the commit that introduced the machinery and never restored. Repairing it would not help either, since OpenSSL requires a FIPS provider to be built from a release carrying a FIPS certificate, so a provider built out of the Node.js tree has no validation status regardless.A note for reviewing the guards. BoringSSL does not define
OPENSSL_VERSION_MAJORand setsOPENSSL_VERSION_NUMBERto 1.1.1, so every version check was excluding it too. The legacy arms are live BoringSSL code, not dead 1.x code. Only guards already nested inside an#ifndef OPENSSL_IS_BORINGSSLwere unwrapped. The rest had their condition rewritten toOPENSSL_IS_BORINGSSLwith both arms kept. Getting one of those wrong usually breaks the BoringSSL build outright, with two exceptions that still compile:crypto_hash.cc's three-wayEVP_MD_do_all_sortedchain, whose final arm serves BoringSSL with libdecrepit, andncrypto.cc's X509 info-access newline.The unreleased DEP0183 Runtime deprecation is reverted before DEP0183 moves directly from Documentation-only to End-of-Life.
crypto.setEngine(),crypto.constants.ENGINE_METHOD_*, and the native ENGINE implementation are removed. The formerclientCertEngine,privateKeyEngine, andprivateKeyIdentifierTLS and HTTPS options remain recognized and throwERR_CRYPTO_CUSTOM_ENGINE_NOT_SUPPORTEDwhen given a non-nullish value, so engine-dependent configurations cannot be silently ignored.Fixes: #56733
Refs: #64211
Refs: #63966
Refs: #53329
Refs: #48950
Refs: #45465
Refs: #42827
Refs: #47076
Refs: #62862
Refs: #38512