Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

End-of-Life dates of Node.js 16 and OpenSSL 1.1.1 do not align #1222

Closed
richardlau opened this issue May 4, 2022 · 15 comments
Closed

End-of-Life dates of Node.js 16 and OpenSSL 1.1.1 do not align #1222

richardlau opened this issue May 4, 2022 · 15 comments

Comments

@richardlau
Copy link
Member

When we drafted the Node.js 16 section of the OpenSSL strategy document (#859) the expectation was that OpenSSL 3 would be released before or around Node.js 16. This didn't happen and we had to release Node.js 16 still on OpenSSL 1.1.1.

Unfortunately OpenSSL 1.1.1 is due to stop receiving updates in September 2023 which is seven months before Node.js 16's End-of-Life date of April 2024.
https://www.openssl.org/policies/releasestrat.html

  • Version 1.1.1 will be supported until 2023-09-11 (LTS).

We need to make a decision regarding what to do about this discrepancy. Our options include:

  1. Do nothing. Node.js 16 will be at risk for any vulnerabilities in OpenSSL 1.1.1 for the last seven months of its lifetime.
  2. End support for Node.js 16 early in September 2023 to coincide with EOL of OpenSSL 1.1.1. We have precedent for doing this when we ended support for Node.js 8 four months early to coincide with the EOL of OpenSSL 1.0.2. If we decide to do this we need to communicate this as early as possible.
  3. Attempt a switch to OpenSSL 3. We would probably need to at least backport and enable by default the legacy provider. I would consider this extremely risky with concerns over, e.g. ABI compatibility for addons (Native modules ABI compatibility problems on Node 17 with OpenSSL 3 / OpenSSL 1 node#41410, node/openssl/ssl.h should compile without any additional defines node#40575). We've had to adjust error message checks in several Node.js tests for OpenSSL 3 and I have no idea if any modules out there would be affected in the same way.

* Node.js 16 is actually using the quictls fork of OpenSSL 1.1.1. I see nothing to suggest that they would continue to provide support for OpenSSL 1.1.1 beyond upstream OpenSSL's planned end of support date.

cc @nodejs/crypto @nodejs/lts @nodejs/tsc

@richardlau
Copy link
Member Author

If I had to express a personal preference right now I would lean towards bringing forward the End-of-Life date of Node.js 16 to September 2023. At that point in time Node.js 18 would be in active LTS (transitioning into maintenance in October 2023).

@panva
Copy link
Member

panva commented May 4, 2022

If I had to express a personal preference right now I would lean towards bringing forward the End-of-Life date of Node.js 16 to September 2023. At that point in time Node.js 18 would be in active LTS (transitioning into maintenance in October 2023).

I concur.

@mcollina
Copy link
Member

mcollina commented May 4, 2022

I concur.

@ChALkeR
Copy link
Member

ChALkeR commented May 4, 2022

I also concur.
I believe that there is enough time for ecosystem / users to adjust to this change in advance and that the alternatives pose more risks.

@tniessen
Copy link
Member

tniessen commented May 4, 2022

I believe this was discussed before and at that point, if I remember correctly, the solution that seemed most likely was switching to OpenSSL 3 even if it is a breaking change. That does seem risky though, and it might be simpler to cut support for Node.js 16 off earlier as planned.

@Trott
Copy link
Member

Trott commented May 4, 2022

I think we should end support early and announce it as soon as possible (and update the chart in the release repository and so on). That also gives us more runway to change our minds.

@mhdawson
Copy link
Member

mhdawson commented May 4, 2022

My initial thought is end support early as well, announcing as soon as we have agreement on the approach.

@cjihrig
Copy link
Contributor

cjihrig commented May 4, 2022

+1 to ending support early.

@danielleadams
Copy link
Contributor

+1 to ending support early, as well (and announcing as soon as possible).

@RaisinTen
Copy link
Contributor

I'm okay with ending support early.

@richardlau
Copy link
Member Author

@mhdawson and I are currently exploring whether we can use Red Hat work to support OpenSSL 1.1.1 in RHEL 8 to potentially keep the existing End-of-Life date of Node.js 16 (April 2024).

@BridgeAR
Copy link
Member

+1 on ending support early

@richardlau
Copy link
Member Author

@mhdawson and I are currently exploring whether we can use Red Hat work to support OpenSSL 1.1.1 in RHEL 8 to potentially keep the existing End-of-Life date of Node.js 16 (April 2024).

The outcome of this investigation is that unfortunately the version of openssl maintained in CentOS Stream 8 has enough differences from upstream OpenSSL 1.1.1 that making a switch to that would also result in potential breakages. For example:

  • The current openssl package in CentOS Stream 8 is based on openssl 1.1.1k with patches on top addressing security vulnerabilities. This means that non-security fix changes are missing (when compared to current openssl 1.1.1o). For example, the second part of our OpenSSL update process fails because RISC-V support is missing (this is illustrative as RISC-V is not a supported Node.js 16 platform).
  • The CentOS Stream 8 version of openssl strips out patented algorithms resulting in a visible difference to Node.js applications in available cryptographic curves (see end of this post for more details).
  • The CentOS Stream 8 version of openssl is based on upstream OpenSSL and not the quic fork that we're currently using. I had to modify configure.py to get Node.js to build as it assumed the quic extensions were present if using the statically linked OpenSSL.
Missing cryptographic curves from CentOS Stream 8 openssl when compared to Node.js 16.15.0
$ diff <(node -e "for (a of crypto.getCurves()) console.log(a)") <(out/Release/node -e "for (a of crypto.getCurves()) console.log(a)")

1,39d0
< Oakley-EC2N-3
< Oakley-EC2N-4
< SM2
< brainpoolP160r1
< brainpoolP160t1
< brainpoolP192r1
< brainpoolP192t1
< brainpoolP224r1
< brainpoolP224t1
< brainpoolP256r1
< brainpoolP256t1
< brainpoolP320r1
< brainpoolP320t1
< brainpoolP384r1
< brainpoolP384t1
< brainpoolP512r1
< brainpoolP512t1
< c2pnb163v1
< c2pnb163v2
< c2pnb163v3
< c2pnb176v1
< c2pnb208w1
< c2pnb272w1
< c2pnb304w1
< c2pnb368w1
< c2tnb191v1
< c2tnb191v2
< c2tnb191v3
< c2tnb239v1
< c2tnb239v2
< c2tnb239v3
< c2tnb359v1
< c2tnb431r1
< prime192v1
< prime192v2
< prime192v3
< prime239v1
< prime239v2
< prime239v3
41,49d1
< secp112r1
< secp112r2
< secp128r1
< secp128r2
< secp160k1
< secp160r1
< secp160r2
< secp192k1
< secp224k1
54,82d5
< sect113r1
< sect113r2
< sect131r1
< sect131r2
< sect163k1
< sect163r1
< sect163r2
< sect193r1
< sect193r2
< sect233k1
< sect233r1
< sect239k1
< sect283k1
< sect283r1
< sect409k1
< sect409r1
< sect571k1
< sect571r1
< wap-wsg-idm-ecid-wtls1
< wap-wsg-idm-ecid-wtls10
< wap-wsg-idm-ecid-wtls11
< wap-wsg-idm-ecid-wtls12
< wap-wsg-idm-ecid-wtls3
< wap-wsg-idm-ecid-wtls4
< wap-wsg-idm-ecid-wtls5
< wap-wsg-idm-ecid-wtls6
< wap-wsg-idm-ecid-wtls7
< wap-wsg-idm-ecid-wtls8
< wap-wsg-idm-ecid-wtls9
$

richardlau added a commit to richardlau/nodejs.org that referenced this issue Jun 1, 2022
richardlau added a commit to richardlau/nodejs.org that referenced this issue Jun 1, 2022
richardlau added a commit to richardlau/nodejs.org that referenced this issue Jun 6, 2022
richardlau added a commit to richardlau/nodejs.org that referenced this issue Jun 6, 2022
SEWeiTung pushed a commit to nodejs/nodejs.org that referenced this issue Jun 11, 2022
richardlau added a commit to richardlau/Release that referenced this issue Jun 13, 2022
Update schedule, README table and chart to reflect the change to
Node.js 16's End-of-Life date to September 11, 2023.

Move Node.js 17 to End-of-Life table.

Refs: nodejs/TSC#1222
Refs: nodejs/nodejs.org#4629
richardlau added a commit to nodejs/Release that referenced this issue Jun 15, 2022
Update schedule, README table and chart to reflect the change to
Node.js 16's End-of-Life date to September 11, 2023.

Move Node.js 17 to End-of-Life table.

Refs: nodejs/TSC#1222
Refs: nodejs/nodejs.org#4629
@richardlau
Copy link
Member Author

The announcement was published and the release schedule updated.
Refs: https://nodejs.org/en/blog/announcements/nodejs16-eol/
Refs: nodejs/Release#752

@richardlau
Copy link
Member Author

I missed a reference to the old date in the CHANGELOG: nodejs/node#45103

nodejs-github-bot pushed a commit to nodejs/node that referenced this issue Oct 21, 2022
Node.js 16's End-of-Life date was brought forward to coincide with
the end of support for upstream OpenSSL 1.1.1.

PR-URL: #45103
Refs: https://nodejs.org/en/blog/announcements/nodejs16-eol/
Refs: nodejs/Release#752
Refs: nodejs/TSC#1222
Reviewed-By: Beth Griggs <bethanyngriggs@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
RafaelGSS pushed a commit to nodejs/node that referenced this issue Nov 1, 2022
Node.js 16's End-of-Life date was brought forward to coincide with
the end of support for upstream OpenSSL 1.1.1.

PR-URL: #45103
Refs: https://nodejs.org/en/blog/announcements/nodejs16-eol/
Refs: nodejs/Release#752
Refs: nodejs/TSC#1222
Reviewed-By: Beth Griggs <bethanyngriggs@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
RafaelGSS pushed a commit to nodejs/node that referenced this issue Nov 10, 2022
Node.js 16's End-of-Life date was brought forward to coincide with
the end of support for upstream OpenSSL 1.1.1.

PR-URL: #45103
Refs: https://nodejs.org/en/blog/announcements/nodejs16-eol/
Refs: nodejs/Release#752
Refs: nodejs/TSC#1222
Reviewed-By: Beth Griggs <bethanyngriggs@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
danielleadams pushed a commit to nodejs/node that referenced this issue Dec 30, 2022
Node.js 16's End-of-Life date was brought forward to coincide with
the end of support for upstream OpenSSL 1.1.1.

PR-URL: #45103
Refs: https://nodejs.org/en/blog/announcements/nodejs16-eol/
Refs: nodejs/Release#752
Refs: nodejs/TSC#1222
Reviewed-By: Beth Griggs <bethanyngriggs@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
danielleadams pushed a commit to nodejs/node that referenced this issue Dec 30, 2022
Node.js 16's End-of-Life date was brought forward to coincide with
the end of support for upstream OpenSSL 1.1.1.

PR-URL: #45103
Refs: https://nodejs.org/en/blog/announcements/nodejs16-eol/
Refs: nodejs/Release#752
Refs: nodejs/TSC#1222
Reviewed-By: Beth Griggs <bethanyngriggs@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
danielleadams pushed a commit to nodejs/node that referenced this issue Jan 3, 2023
Node.js 16's End-of-Life date was brought forward to coincide with
the end of support for upstream OpenSSL 1.1.1.

PR-URL: #45103
Refs: https://nodejs.org/en/blog/announcements/nodejs16-eol/
Refs: nodejs/Release#752
Refs: nodejs/TSC#1222
Reviewed-By: Beth Griggs <bethanyngriggs@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests