This relies on having a public domain name whose DNS records you can control. We'll create a DNS entry that will loopback to localhost when requested.
For example: localhost.example.com will tell the browser to load the IP 127.0.0.1
You must have control of the DNS records of example.com for this to work.
-
Create the loopback A record for
localhost.example.com:In your DNS provider's control panel:
Type: A
Name: localhost.example.com.
Data: 127.0.0.1
TTL: 3600
- After a while, the following command:
$ dig a localhost.example.com.
;; ANSWER SECTION:
localhost.example.com. 3599 IN A 127.0.0.1
- Install LetsEncrypt's certbot so we can generate a valid SSL cert:
brew install certbot
- Generate a SSL cert for your domain using the DNS challenge type which means you won't need to have a server running on this domain:
sudo certbot certonly --config-dir . --work-dir . --logs-dir . --manual --preferred-challenges dns
- Enter the domain name when prompted:
localhost.example.com
-
Ok with logging? Yes
-
Add the DNS record and TXT value in your DNS provider's control panel as requested by certbot. Do not press Enter until it's been deployed.
-
There are a few more questions then certbot will have generated files in the directory you ran the command in:
live
└── localhost.example.com
├── README
├── cert.pem
├── chain.pem
├── fullchain.pem
└── privkey.pem
- Use the redbox proxy to point to the generated certificates and start on port 443:
sudo node redbird-proxy.js live/localhost.example.com/
- Set the
API_URLin.envto:
API_URL=https://localhost.example.com/api
- Start HTTP client on port 80 (edit .env to set PORT=80)
sudo npm start
The HTTPS server should be available without any browser warnings. HTTP version will be available on http://localhost.example.com.