Using mkcert in Node.js

tingwei628

Tingwei

Posted on July 11, 2020

Using mkcert in Node.js

This main purpose is to create self signed ssl certificates with mkcert@Subash and write a quick demo locally with Node.js.

Step 1: Install NPM package mkcert

$npm install mkcert
Enter fullscreen mode Exit fullscreen mode

Step 2: Create ca.key and ca.crt

$node_modules/mkcert/src/cli.js create-ca
Enter fullscreen mode Exit fullscreen mode

It generates two files ca.key, ca.crt in node_modules/mkcert/src.

Step 3: Create cert.key and cert.crt

$node_modules/mkcert/src/cli.js create-cert
Enter fullscreen mode Exit fullscreen mode

It generates two files cert.key, cert.crt in node_modules/mkcert/src.

Step 4: For the convenience, copy ca and cert out.

$cp node_modules/mkcert/src/ca.key ./ca.key
$cp node_modules/mkcert/src/ca.cert ./ca.crt
$cp node_modules/mkcert/src/cert.key ./cert.key
$cp node_modules/mkcert/src/cert.crt ./cert.crt
Enter fullscreen mode Exit fullscreen mode

The directory looks like this.

./node_modules
./client.js
./server.js
./ca.key
./ca.crt
./cert.key
./cert.crt
Enter fullscreen mode Exit fullscreen mode

Step 5: Write codes on server side

in server.js

const https = require('https');
const fs = require('fs');
const hostname = '127.0.0.1';
const port = 3001;

const server = https.createServer({
  key: fs.readFileSync("./cert.key"),
  cert: fs.readFileSync("./cert.crt"),
}, (req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at https://${hostname}:${port}/`);
});
Enter fullscreen mode Exit fullscreen mode

Step 6: Write codes on client side

in client.js

const https = require('https');
const fs = require('fs');
const options = {
  hostname: 'localhost',
  port: 3001,
  method: 'GET',
  ca: fs.readFileSync('./ca.crt'),
};
const req = https.request(options, (res) => {
  res.on('data', (d) => {
    process.stdout.write(d);
  });
}).on('error', (e) => {
  console.error(e);
});
req.end();
Enter fullscreen mode Exit fullscreen mode

Step 7: Start a server

$node server.js
Enter fullscreen mode Exit fullscreen mode

Step 8: Send a request to server

$node client.js
Enter fullscreen mode Exit fullscreen mode

You can send a request with curl. Remember to put --cacert

$curl --cacert ./ca.crt -X GET https://localhost:3001
Enter fullscreen mode Exit fullscreen mode

Thank you!

💖 💪 🙅 🚩
tingwei628
Tingwei

Posted on July 11, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Using mkcert in Node.js
node Using mkcert in Node.js

July 11, 2020