48

I am trying to setup a development environment on my local PC. As the production website supports HTTPS (who does not these days?), I want to have this also on the localhost. I thought it would be easy, but no.

I have a XAMP installation, and setup all so I can access the website. However, whenever I go to any page on the site locally, I get the chrome warning:

NET::ERR_CERT_AUTHORITY_INVALID

I did follow the following thread to try and solve it:

Getting Chrome to accept self-signed localhost certificate

I also created the certificate with the correct Subject Alternative Name (SAN) section, based on this:

https://deliciousbrains.com/https-locally-without-browser-privacy-errors/

After that, I generated the CER or P7B file and imported that into Chrome. I restarted both Apache and Chrome.

I put the certificate in the Trusted Root Certificate Authorities. Somehow, Chrome decided however to place it in the Intermediate Root Certificate Authorities...

I am using Chrome 61, I had the same in 60.

So somehow I am unable to install a self signed certificate, and keep getting this warning which basically makes development on localhost impossible...

I understand that this self-signing is not exactly trustworthy, but there must be a way to develop offline? It does not make sense that we have to build websites online from now on?...

Any ideas?

E.S.
  • 511
  • 1
  • 4
  • 6

8 Answers8

39

We can simply allow invalid certificates for developing purposes in chrome.

This is only valid for Localhost

Paste this in your chrome address bar:

chrome://flags/#allow-insecure-localhost

Then enable the highlighted text: Allow invalid certificates for resources loaded from localhost

enter image description here

shalitha senanayaka
  • 1,905
  • 20
  • 37
  • 4
    I guess this only works if the URL says `https://localhost`, because it does not work with a domain that _points to_ `localhost` / `127.0.0.1` on the `/etc/hosts` file – Rafa Mar 01 '21 at 17:39
  • Honestly, if you're testing something for a one-off scenario, this is the best solution. Thanks! – Sujay66 Apr 02 '21 at 20:22
  • 2
    No it will not solve problems for domains with DNS to `127.0.0.1` – Jos Jan 29 '22 at 12:10
  • This answers the question. ***Use this for MS Edge: edge://flags/#allow-insecure-localhost – user3590235 Mar 10 '23 at 21:27
8

Here are my instructions using the KeyStore Explorer tool. The two things I was previously missing when I created the cert were:

  • Adding in Authority Key Identifier (or AKID), select the same CN=<certificate_name> you used when creating it.
  • Adding in the Basic Constraints option (do not select "is a CA")

Without those two things Chrome will issue warnings/errors even when you have installed the self-signed certificate into your MS-CAPI PKI Trust store (as a Trusted Root Authority).

Steps:

1. Instructions using KSE (KeyStore Explorer)
2. Create a JKS
3. Creating a self-signed certificate
4. Open KeyStore Explorer
5. File | New | JKS | OK
6. Create a Password for your JKS file
7. File | Save as... | enter your password 
8. Enter file name | OK
9. Tools | Generate Key Pair
10. Select Algorithm and Key Size (i.e. 2048) | OK
11. Select validity period (i.e. 5 years) 
12. Select Name (Book icon) | Enter in Name fields | OK: I.e. “CN=localhost…<or SERVER_NAME>”
13. Add Extensions (Very Important), this determines what type of certificate it will be and how it can be used.  This example will be for a standard server certificate with SSL.
14. Add in the Key Usage item
15. Add in the Digital Signature and Key Encipherment options checkbox
16. Add in the EKU (Extended Key Usage) options
17. Select both of these options: "TLS Web Client Authentication" and "TLS Web Server Authentication"
18. Add in the SANs (Subject Alternative Name)
19. Add in all the needed DNS names and IP Addresses (if applicable) for which this server will be used. (repeat for all desired values) (e.g. 127.0.0.1 and localhost (or <SERVER_NAME>)
20. It will look something like this when it's done
21. When it's done you will see all the fields with the OIDs (Object Identifiers) listed | OK | OK
22. Add in the AKID (Authority Key Identifier)
23. Add Extensions "+"
24. Add Extension Type | Authority Key Identifier
25. Select the Authority Cert Issuer of the CN that you created above (.e.g "CN=localhost...") | OK
26. Add in a "Basic Constraints" (do NOT check "Subject is a CA")
27. When you're done you'll see these listed: hit "OK"

/**
 * Note: the Basic Constraints and AKID (Authority Key Identifer) are needed 
 * for the Chrome Browser to validate the self-signed certificate as a 
 * trusted certificate. Otherwise you'll see warning or error messages even 
 * after you have add this certificate, explicitly, to your MS-CAPI Trusted 
 * Root certificates.
 **/

28. Enter in the Alias of the keypair name you want to use
29. Enter in the private keypair password

/**
 * Note: this password MUST be the same as the JKS file keystore password or 
 * Java may fail silently when trying to use this certificate.
 **/
 
30. You should see a message indicating success. | OK 
31. Then, save the File | Save
luiscla27
  • 4,956
  • 37
  • 49
atom88
  • 1,449
  • 3
  • 22
  • 32
  • This may sound stupid but what file extension should the file be and what do I do with it after these instructions? – K-Dawg Aug 14 '18 at 09:43
  • see step # 5 above (JKS file extension). Then, right click in KeyStore Explorer and select "export" the "public key". You can then save this as either a .p7 or .cer / .crt extension. Once you have that file you can then import your .cer file into your chrome and/or FireFox browser which should resolve the issue, I believe. – atom88 Aug 15 '18 at 13:25
  • 1
    If you are planning on using the certificate on a webserver you must export the private key as well. Right click -> Export -> Export Private Key, Choose OpenSSL, uncheck Encrypt, choose file location, Export. – Shawn Feb 04 '19 at 19:23
  • 1
    This just worked. After the creation I downloaded the certificate and added it for chrome. Now no more warnings appear. – Dominik Mohr Mar 08 '19 at 11:24
  • it is working perfectly in chrome. but how to make it work with fierfox? – RAGINROSE Jul 22 '19 at 09:53
  • 1
    finally find a way to use it in firefox. need go to about:config and change the configuration security.enterprise_roots.enabled to true. – RAGINROSE Jul 22 '19 at 12:01
7

I fixed my exactly same issue following this .

Issue seemed to be in the way the certificate was created.

The code below is from the above site.

#!/usr/bin/env bash
mkdir ~/ssl/
openssl genrsa -des3 -out ~/ssl/rootCA.key 2048
openssl req -x509 -new -nodes -key ~/ssl/rootCA.key -sha256 -days 1024 -out ~/ssl/rootCA.pem


#!/usr/bin/env bash
sudo openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )

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

server.csr.cnf file

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=US
ST=New York
L=Rochester
O=End Point
OU=Testing Domain
emailAddress=your-administrative-address@your-awesome-existing-domain.com
CN = localhost

v3.ext file

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
Temp O'rary
  • 5,366
  • 13
  • 49
  • 109
  • 5
    can you add some more details? What did you import to chrome? i did the same steps but still facing the error – Joe Platano Dec 30 '17 at 23:05
  • The 2 things I was previously missing when I created the cert were: AKID (Authority Key Identifier) - select the same "CN=" you used when creating it. Adding in the "Basic Constraints" option (do not select "is a CA") Without those 2 things Chrome will issue warnings / errors even when you have installed the self-signed certificate into your MS-CAPI PKI Trust store (as a "Trusted Root Authority). – atom88 Feb 08 '18 at 15:16
  • It showing on last command ```CA certificate and CA private key do not match``` – Asif Mohammad Mollah Jul 12 '18 at 21:52
2

There is a great GUI java-based utility that I use for creating and manipulating all things PKI called KeyStore Explorer. So much easier than all of the command-line options:

http://keystore-explorer.org/

atom88
  • 1,449
  • 3
  • 22
  • 32
1
  1. Open your chrome browser

  2. Put the below link in the browser address bar and press Enter.

    chrome://flags/#allow-insecure-localhost

  3. Select "Allow invalid certificates for resources loaded from localhost." Disabled to Enabled.

Hope your problem will fix. Thanks

Shalim Ahmed
  • 259
  • 3
  • 6
0

I found this by pure chance: if you have Fiddler installed and let it run in the background, the first time your app runs will open a popup with the certificate issue and if you click 'yes' it will allow your requests through. See this https://www.telerik.com/forums/fiddler-certificate-error-bypass-question.

kurt
  • 584
  • 13
  • 16
0

Just update your java(or install java depends on your system architecture(32or64 bit)).

After the installation restarts the chrome browser then it will work fine.

I have been facing the issue for a long time. I just discovered this and it worked for me.

0

Try disabling all your browser extensions and check if the problem is resolved.enter image description here

Netwons
  • 1,170
  • 11
  • 14