How to get a basic HTTPS web server up and running
suggest changeOnce you have node.js installed on your system, you can just follow the procedure below to get a basic web server running with support for both HTTP and HTTPS!
Step 1 : Build a Certificate Authority
- create the folder where you want to store your key & certificate :
mkdir conf
- go to that directory :
cd conf
- grab this
ca.cnf
file to use as a configuration shortcut :
wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf
- create a new certificate authority using this configuration :
openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem
- now that we have our certificate authority in
ca-key.pem
andca-cert.pem
, let’s generate a private key for the server :
openssl genrsa -out key.pem 4096
- grab this
server.cnf
file to use as a configuration shortcut :
wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf
- generate the certificate signing request using this configuration :
openssl req -new -config server.cnf -key key.pem -out csr.pem
- sign the request :
openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem
Step 2 : Install your certificate as a root certificate
- copy your certificate to your root certificates’ folder :
sudo cp ca-crt.pem /usr/local/share/ca-certificates/ca-crt.pem
- update CA store :
sudo update-ca-certificates
Step 3 : Starting your node server
First, you want to create a server.js
file that contains your actual server code.
The minimal setup for an HTTPS server in Node.js would be something like this :
var https = require('https');
var fs = require('fs');
var httpsOptions = {
key: fs.readFileSync('path/to/server-key.pem'),
cert: fs.readFileSync('path/to/server-crt.pem')
};
var app = function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}
https.createServer(httpsOptions, app).listen(4433);
If you also want to support http requests, you need to make just this small modification :
var http = require('http');
var https = require('https');
var fs = require('fs');
var httpsOptions = {
key: fs.readFileSync('path/to/server-key.pem'),
cert: fs.readFileSync('path/to/server-crt.pem')
};
var app = function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}
http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);
- go to the directory where your
server.js
is located :
cd /path/to
- run
server.js
:
node server.js