How do I setup a SSL certificate for an express.js server? How do I setup a SSL certificate for an express.js server? express express

How do I setup a SSL certificate for an express.js server?


See the Express docs as well as the Node docs for https.createServer (which is what express recommends to use):

var privateKey = fs.readFileSync( 'privatekey.pem' );var certificate = fs.readFileSync( 'certificate.pem' );https.createServer({    key: privateKey,    cert: certificate}, app).listen(port);

Other options for createServer are at: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener


I was able to get SSL working with the following boilerplate code:

var fs = require('fs'),    http = require('http'),    https = require('https'),    express = require('express');var port = 8000;var options = {    key: fs.readFileSync('./ssl/privatekey.pem'),    cert: fs.readFileSync('./ssl/certificate.pem'),};var app = express();var server = https.createServer(options, app).listen(port, function(){  console.log("Express server listening on port " + port);});app.get('/', function (req, res) {    res.writeHead(200);    res.end("hello world\n");});


This is my working code for express 4.0.

express 4.0 is very different from 3.0 and others.

4.0 you have /bin/www file, which you are going to add https here.

"npm start" is standard way you start express 4.0 server.

readFileSync() function should use __dirname get current directory

while require() use ./ refer to current directory.

First you put private.key and public.cert file under /bin folder, It is same folder as WWW file.

no such directory found error:

  key: fs.readFileSync('../private.key'),  cert: fs.readFileSync('../public.cert')

error, no such directory found

  key: fs.readFileSync('./private.key'),  cert: fs.readFileSync('./public.cert')

Working code should be

key: fs.readFileSync(__dirname + '/private.key', 'utf8'),cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')

Complete https code is:

const https = require('https');const fs = require('fs');// readFileSync function must use __dirname get current directory// require use ./ refer to current directory.const options = {   key: fs.readFileSync(__dirname + '/private.key', 'utf8'),  cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')}; // Create HTTPs server. var server = https.createServer(options, app);