Browse Source

crypto: Use system CAs instead of using bundled ones

NodeJS can already use an external, shared OpenSSL library. This
library knows where to look for OS managed certificates. Allow
a compile-time option to use this CA store by default instead of
using bundled certificates.

In case when using bundled OpenSSL, the paths are also valid for
majority of Linux systems without additional intervention. If
this is not set, we can use SSL_CERT_DIR to point it to correct
location.

Fixes: https://github.com/nodejs/node/issues/3159
PR-URL: https://github.com/nodejs/node/pull/8334
Backport-PR-URL: https://github.com/nodejs/node/pull/11794
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
v6.x
Adam Majer 8 years ago
committed by Myles Borins
parent
commit
fd9bb56f9a
No known key found for this signature in database GPG Key ID: 933B01F40B5CA946
  1. 7
      configure
  2. 4
      src/node_crypto.cc

7
configure

@ -153,6 +153,11 @@ parser.add_option('--openssl-fips',
dest='openssl_fips',
help='Build OpenSSL using FIPS canister .o file in supplied folder')
parser.add_option('--openssl-use-def-ca-store',
action='store_true',
dest='use_openssl_ca_store',
help='Use OpenSSL supplied CA store instead of compiled-in Mozilla CA copy.')
shared_optgroup.add_option('--shared-http-parser',
action='store_true',
dest='shared_http_parser',
@ -953,6 +958,8 @@ def configure_openssl(o):
o['variables']['node_use_openssl'] = b(not options.without_ssl)
o['variables']['node_shared_openssl'] = b(options.shared_openssl)
o['variables']['openssl_no_asm'] = 1 if options.openssl_no_asm else 0
if options.use_openssl_ca_store:
o['defines'] += ['NODE_OPENSSL_CERT_STORE']
if options.openssl_fips:
o['variables']['openssl_fips'] = options.openssl_fips
fips_dir = os.path.join(root_dir, 'deps', 'openssl', 'fips')

4
src/node_crypto.cc

@ -708,10 +708,14 @@ static X509_STORE* NewRootCertStore() {
}
X509_STORE* store = X509_STORE_new();
#if defined(NODE_OPENSSL_CERT_STORE)
X509_STORE_set_default_paths(store);
#else
for (X509 *cert : root_certs_vector) {
X509_up_ref(cert);
X509_STORE_add_cert(store, cert);
}
#endif
return store;
}

Loading…
Cancel
Save