Skip to content

Conversation

@Aditi-1400
Copy link
Contributor

@Aditi-1400 Aditi-1400 commented Nov 11, 2025

Makes the --use-system-ca option a per-environment option rather than a per-process option so that workers can enable/disable them individually

@nodejs-github-bot
Copy link
Collaborator

Review requested:

  • @nodejs/config
  • @nodejs/crypto
  • @nodejs/startup

@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. lib / src Issues and PRs related to general changes in the lib or src directory. needs-ci PRs that need a full CI run. labels Nov 11, 2025
@Aditi-1400 Aditi-1400 force-pushed the ca-per-env branch 2 times, most recently from d87558c to 23473b9 Compare November 11, 2025 10:28
@joyeecheung
Copy link
Member

joyeecheung commented Nov 11, 2025

Hmm, I think this may need more work than just updating the options - the implication of being per-env is that each worker would then be able to toggle this independently. Say when the main thread does not enable it but a worker does, then the worker will have the system CA certs in their default store but the parent doesn't. Can you add a test for this, and the other way around (parent enables it, worker disables it)? My impression is that the default store initialisation code is not yet ready for this and it's still shared across the process (so if a worker enables it, suddenly the parent get it too, which would be unexpected).

@codecov
Copy link

codecov bot commented Nov 11, 2025

Codecov Report

❌ Patch coverage is 74.57627% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 88.51%. Comparing base (903f647) to head (d8281c4).
⚠️ Report is 7 commits behind head on main.

Files with missing lines Patch % Lines
src/crypto/crypto_context.cc 75.60% 4 Missing and 6 partials ⚠️
src/quic/tlscontext.cc 58.33% 5 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #60678      +/-   ##
==========================================
- Coverage   88.54%   88.51%   -0.03%     
==========================================
  Files         704      704              
  Lines      208793   208815      +22     
  Branches    40307    40315       +8     
==========================================
- Hits       184866   184835      -31     
- Misses      15913    15957      +44     
- Partials     8014     8023       +9     
Files with missing lines Coverage Δ
src/crypto/crypto_common.cc 79.67% <100.00%> (ø)
src/crypto/crypto_context.h 100.00% <ø> (ø)
src/node.cc 75.80% <ø> (-0.17%) ⬇️
src/node_options.cc 77.92% <100.00%> (+0.02%) ⬆️
src/node_options.h 97.89% <100.00%> (ø)
src/quic/endpoint.cc 56.51% <100.00%> (ø)
src/quic/tlscontext.h 65.38% <ø> (ø)
src/quic/tlscontext.cc 36.85% <58.33%> (ø)
src/crypto/crypto_context.cc 70.98% <75.60%> (+0.14%) ⬆️

... and 31 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@Aditi-1400 Aditi-1400 force-pushed the ca-per-env branch 2 times, most recently from f22457c to 780c272 Compare December 2, 2025 14:16
@Aditi-1400 Aditi-1400 force-pushed the ca-per-env branch 4 times, most recently from 38913f9 to d9fb49d Compare December 12, 2025 18:05
Copy link
Member

@joyeecheung joyeecheung left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add some tests to test/parallel that checks this affects tls.getCACertificates('default') in a worker if tls.getCACertificates('system') returns non-empty in a parent? (if there are no system CAs in the testing machine, then the test can be skipped - that way it can run even without the mock certificates installed)

static std::atomic<bool> has_cached_bundled_root_certs{false};
static std::atomic<bool> has_cached_system_root_certs{false};
static std::atomic<bool> has_cached_extra_root_certs{false};
static std::atomic<bool> has_use_system_ca{false};
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it might be worth it to tweak StartLoadingCertificatesOffThread so that if no thread has started loading system CAs off thread, and a new worker is run with --use-system-ca, then the new worker can still trigger an off-thread load (right now I think it only try once, and if the first try does not include system CA then there won't be any off-thread loading anymore). Although, this can just be a TODO and doesn't need to be addressed here.


// TODO(joyeecheung): we can probably just reset it to nullptr
// and let the next call to NewRootCertStore() create a new one.
root_cert_store = NewRootCertStore();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you remove the TODO comment above? :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops! 🤦‍♀️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++ Issues and PRs that require attention from people who are familiar with C++. lib / src Issues and PRs related to general changes in the lib or src directory. needs-ci PRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants