Use SSL in your local development environment
Posted
Updated
Europe’s developer-focused job platform
Let companies apply to you
Developer-focused, salary and tech stack upfront.
Just one profile, no job applications!
This article is based on Node v16.14.0 and Express 4.17.x.
If you're running your Node.js backend locally its served using HTTP by default. In some cases it is required that your backend is served via https for integrating a service like Azure B2C or similar. This article is about how to configure express.js to serve a Node.js backend over https in local development. Let's see how this can be achieved in Node.js.
💰 The Pragmatic Programmer: journey to mastery. 💰 One of the best books in software development, sold over 200,000 times.
If you want to find out how this is achieved in a React app, check out this article - How to setup ssl in React, for Angular check out this article - How to setup ssl in Angular.
To use https locally, we have to do the following:
You have to create a local Certificate Authority, and an SSL certificate and set the SSL_CERT_FILE
and SSL_KEY_FILE
to the generated files.
As the first step, you should generate a local Certificate Authority, and an SSL certificate for Local Development.
mkcert -install
.mkcert localhost
.To serve an Express.js app locally with SSL we have to update the options object - key
and cert
properties.
Hence, after generating the local certificate authority and ssl certificate we have to set the key
and cert
properties to the path of the certificate and key files.
Let's look at a simple express server. The variables CERT-PATH
and KEY-PATH
are the paths to the generated files.
Create or add a project folder.
mkdir node-ssl-test
Initialize project with npm init -y
to be able to install node packages.
cd node-ssl-test
npm init -y
Install express
.
npm install express
Create an index.js
file.
touch index.js
Copy example code.
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const options = {
key: fs.readFileSync(CERT_PATH),
cert: fs.readFileSync(KEY_PATH),
};
app.use((req, res, next) => {
res.send('<h1>HTTPS is working!</h1>');
});
const port = 3000;
https.createServer(options, app).listen(port, () => {
console.log('Server listening on port ' + port);
});
Now run the index.js
file with node index.js
and open a browser tab and navigate to https://localhost:3000
, you should see HTTPS works!.
You can also inspect the certificate in the browser dev tools (Chrome -> Security Tab or Lock Icon).
Thanks for reading and if you have any questions, use the comment function or send me a message @mariokandut.
If you want to know more about Node, have a look at these Node Tutorials.
References (and Big thanks):
Never miss an article.