[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = XX
ST = XX
L = XX
O = XX
OU = XX
CN = localhost
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
C
means "Country", a two-letters country code likeUS
orFR
ST
means "State", a stringL
means "Locality", a stringO
means "Organization", a stringOU
means "Organization Unit", a stringCN
means "Common Name", a string
$ cd path/to/myapp
$ mkdir cert
$ openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout localhost.key -out localhost.cert -config path/to/cert.template -sha256
You should get two files:
cert/localhost.cert
cert/localhost.key
const fs = require('fs');
const http = require('http');
const https = require('https');
const express = require('express');
const app = express();
// Start HTTP server
http.createServer(app).listen(3100, () => {
console.log(`HTTP Server listening on port 3100...`);
});
// Start HTTPS server
https.createServer({
key: fs.readFileSync('cert/localhost.key').toString(),
cert: fs.readFileSync('cert/localhost.cert').toString()
}, app).listen(443, () => {
console.log('HTTPS Server listening on port 443...');
});
$ sudo security add-trusted-cert -d -r trustAsRoot -k /Library/Keychains/System.keychain cert/localhost.cert
$ sudo cp cert/localhost.cert /usr/local/share/ca-certificates/
$ sudo update-ca-certificates