How to make https request for your “localhost “?

how-to-get-https-working-on-your-local-development-environment

Generate root SSL certificate

This root certificate can then be used to sign any number of certificates you might generate for individual domains

  • Generate key file
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
openssl genrsa -des3 -out rootCA.key 2048
openssl genrsa -des3 -out rootCA.key 2048
openssl genrsa -des3 -out rootCA.key 2048
  • Generate certificate file
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

This certificate will have a validity of 1,024 days

Trust SSL certificate

You need to to tell your Mac to trust your root certificate so all individual certificates issued by it are also trusted

  • Double click “rootCA.pem” file to import it to Keychain Access
  • Open Keychain, double click certificate you have just imported, change “When using this certificate” to “Always Trust”

Issue a domain SSL certificate for “localhost”

  • Create a new OpenSSL configuration file “server.csr.cnf" so you can import these settings when creating a certificate instead of entering them on the command line
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=RD
ST=random
L=random
O=random
OU=random
emailAddress=random@random.com
CN = localhost
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C=RD ST=random L=random O=random OU=random emailAddress=random@random.com CN = localhost
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=RD
ST=random
L=random
O=random
OU=random
emailAddress=random@random.com
CN = localhost
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = localhost
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
  • Create certificate key
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf ) openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

Use your new SSL certificate

Move server.key and server.crt to an accessible location on your server and include them when starting it.

In an Express app running on Node.js, you’d do something like this:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
const path = require("path");
const fs = require("fs");
const https = require("https");
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const port = 3000;
//////////////////
// Setup server
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: true,
})
);
const certOptions = {
key: fs.readFileSync(path.resolve("./server.key")),
cert: fs.readFileSync(path.resolve("./server.crt")),
};
const server = https.createServer(certOptions, app);
// Listen request
app.get("/", (request, response) => {
response.json({ info: "Node.js, Express, and Postgres API" });
});
server.listen(port, () => {
console.log(`App running on port ${port}.`);
});
const path = require("path"); const fs = require("fs"); const https = require("https"); const express = require("express"); const bodyParser = require("body-parser"); const app = express(); const port = 3000; ////////////////// // Setup server app.use(bodyParser.json()); app.use( bodyParser.urlencoded({ extended: true, }) ); const certOptions = { key: fs.readFileSync(path.resolve("./server.key")), cert: fs.readFileSync(path.resolve("./server.crt")), }; const server = https.createServer(certOptions, app); // Listen request app.get("/", (request, response) => { response.json({ info: "Node.js, Express, and Postgres API" }); }); server.listen(port, () => { console.log(`App running on port ${port}.`); });
const path = require("path");
const fs = require("fs");
const https = require("https");
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const port = 3000;

//////////////////
// Setup server
app.use(bodyParser.json());
app.use(
  bodyParser.urlencoded({
    extended: true,
  })
);

const certOptions = {
  key: fs.readFileSync(path.resolve("./server.key")),
  cert: fs.readFileSync(path.resolve("./server.crt")),
};
const server = https.createServer(certOptions, app);

// Listen request
app.get("/", (request, response) => {
  response.json({ info: "Node.js, Express, and Postgres API" });
});

server.listen(port, () => {
  console.log(`App running on port ${port}.`);
});

Be the first to comment

Leave a Reply

Your email address will not be published.


*