node.jsnpm

How to add custom certificate authority (CA) to nodejs


I'm using a CLI tool to build hybrid mobile apps which has a cool upload feature so I can test the app on a device without going through the app store (it's ionic-cli). However, in my company like so many other companies TLS requests are re-signed with the company's own custom CA certificate which I have on my machine in the keychain (OS X). However, nodejs does not use the keychain to get its list of CA's to trust. I don't control the ionic-cli app so I can't simply pass in a { ca: } property to the https module. I could also see this being a problem for any node app which I do not control. Is it possible to tell nodejs to trust a CA?

I wasn't sure if this belonged in Information Security or any of the other exchanges...


Solution

  • Node.js 7.3.0 (and the LTS versions 6.10.0 and 4.8.0) added NODE_EXTRA_CA_CERTS environment variable for you to pass the CA certificates file. It will be safer than disabling certificate verification using NODE_TLS_REJECT_UNAUTHORIZED.

    $ export NODE_EXTRA_CA_CERTS=[your CA certificate file path]
    

    FYI: The file format is a PEM BUNDLE. That means it's just a bunch of PEM-encoded-certificates all in the same file. You can create it just like this: cat *.cer > node_extra_ca_certs.pembundle and the use export NODE_EXTRA_CA_CERTS=node_extra_ca_certs.pembundle