NET::ERR_CERT_AUTHORITY_INVALID: 5 Fixes Compared
Fix NET::ERR_CERT_AUTHORITY_INVALID by comparing self-signed certs, Let's Encrypt, commercial CAs, local trust, and proxy issues—with clear trade-offs.

On this page
- What NET::ERR_CERT_AUTHORITY_INVALID Actually Means
- Option 1: Let's Encrypt (Free Automated Certificates)
- Option 2: Self-Signed Certificates (Development Only)
- Option 3: Commercial Certificate Authorities
- Option 4: Fixing Incomplete Certificate Chains
- When System Time and Proxy Issues Cause Validation Failures
- Comparison Summary and Recommendations
TL;DR — Key takeaways
- NET::ERR_CERT_AUTHORITY_INVALID means the browser can't verify your certificate's issuer—usually from self-signed certs, expired root CAs, or incomplete certificate chains.
- Let's Encrypt provides free, auto-renewing certificates trusted by all modern browsers and is the fastest fix for production sites with public domains.
- Self-signed certificates work for internal testing but require manual trust installation on every client device and will always trigger browser warnings for visitors.
- Commercial CAs offer extended validation and wildcard options but cost $50–$300/year and require the same ACME automation or manual renewal as free alternatives.
- Always verify your full certificate chain is served (certificate + intermediates) and check that your server's system time is accurate to prevent validation failures.
You load your site and Chrome shows a red padlock with NET::ERR_CERT_AUTHORITY_INVALID. Firefox calls it SEC_ERROR_UNKNOWN_ISSUER. Same problem: the browser doesn't trust whoever signed your SSL certificate.
I've walked dozens of hosting customers through this error. The fix depends entirely on why the certificate isn't trusted—self-signed for testing, missing intermediate chain, expired root CA, or a configuration mistake. Each approach has trade-offs in cost, automation, and browser compatibility. This comparison breaks down the five main options, when each makes sense, and how to implement them correctly.
Option 1: Let's Encrypt (Free Automated Certificates)
Let's Encrypt is a free certificate authority that issues domain-validated certificates trusted by every modern browser. Certificates last 90 days and renew automatically with certbot or similar ACME clients.
Trade-offs: you need a public domain name that resolves to your server (no IP-only certificates), port 80 or 443 must be accessible for domain validation challenges, and you're limited to domain validation—no organization validation or extended validation green bar. Wildcard certificates require DNS-based validation, which means API access to your DNS provider or manual TXT record updates every 90 days.
Implementation takes about 10 minutes. Install certbot, run certbot --nginx or certbot --apache depending on your web server, and it handles certificate issuance and configuration automatically. Set up a cron job or systemd timer to run certbot renew twice daily. The client checks expiration and renews certificates with less than 30 days remaining.
This is the default choice for production sites. It's free, automated, and trusted everywhere. The 90-day expiration is a feature, not a bug—it forces automation and limits the damage window if a private key is compromised.
- Zero cost, unlimited certificates per domain
- Automatic renewal eliminates manual tracking
- Trusted by 99.9% of browsers and operating systems
- Rate limits: 50 certificates per registered domain per week
- No IP certificates or certificates for internal hostnames
Option 2: Self-Signed Certificates (Development Only)
A self-signed certificate is one where you act as your own certificate authority. You generate a private key and certificate, sign it yourself, and configure your server to use it. Browsers don't trust it because you're not in their root CA list.
Use this for local development, internal testing, or private networks where you control every client. Don't use it for production sites that external users access. Every visitor will see a security warning, and many will leave rather than click through.
Generate one with OpenSSL: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes. Answer the prompts (common name should match your hostname), then configure your web server to use key.pem and cert.pem. Browsers will complain, but the connection is still encrypted—just not verified by a trusted third party.
To avoid warnings during local development, add the certificate to your operating system's trust store. On macOS, open Keychain Access and import the .pem file into the System keychain, then set it to Always Trust. On Windows, import it into the Trusted Root Certification Authorities store via certmgr.msc. On Linux, copy it to /usr/local/share/ca-certificates/ and run update-ca-certificates.
- Free and works without internet access or domain names
- Full control over certificate contents and expiration
- No dependency on external certificate authorities
- Requires manual trust installation on every client device
- Produces security warnings for any external visitor
Option 4: Fixing Incomplete Certificate Chains
You might already have a valid certificate from Let's Encrypt or a commercial CA but still see the error. That usually means your server isn't sending the intermediate certificates that connect your certificate to a trusted root.
Certificate authorities issue intermediate CAs that sign your certificate. Browsers need the full chain: your certificate, the intermediate(s), and sometimes the root (though roots are already in the browser's trust store, so including them is optional). If you only configure your server with your certificate file, the chain is broken.
Check with openssl s_client -connect yourdomain.com:443 -servername yourdomain.com. Look for multiple certificate blocks in the output. You should see at least two: your certificate and the intermediate. If you only see one, your server isn't sending the intermediates.
Fix it by downloading the intermediate certificates from your CA's website (Let's Encrypt's are at letsencrypt.org/certificates, commercial CAs provide them in your download bundle). Concatenate them into a single file: cat your-cert.crt intermediate.crt > fullchain.crt. Then configure your web server to use fullchain.crt instead of your-cert.crt. Certbot does this automatically and creates fullchain.pem for you.
- Test chain completeness with SSL Labs or openssl s_client
- Intermediate certificates are provided by your CA, not generated by you
- Order matters: your certificate first, then intermediates, then optionally root
- Modern ACME clients handle chain building automatically
- Missing intermediates cause errors on some browsers but not others
When System Time and Proxy Issues Cause Validation Failures
Certificates include notBefore and notAfter timestamps. If your server's system clock is wrong, the certificate appears expired or not yet valid, and validation fails.
Check with date on Linux or macOS, Get-Date on Windows. If it's off by more than a few minutes, fix it. Enable NTP with systemctl enable --now systemd-timesyncd on systemd-based Linux distributions or configure your OS's time sync settings. Cloud instances and VMs sometimes have clock drift issues, especially after snapshots or suspend/resume cycles.
Corporate proxies and antivirus software can also trigger this error. Some proxies perform SSL inspection by replacing your certificate with one signed by the proxy's own CA. If that CA isn't in the client's trust store, you get NET::ERR_CERT_AUTHORITY_INVALID even though the origin server's certificate is fine.
Test from outside your network to isolate proxy issues. If the error only appears on your corporate network, ask your IT team whether SSL inspection is enabled and request the proxy's root certificate for installation. For antivirus software, check if it has an HTTPS scanning feature and either disable it or add your development domain to its exclusion list.
- System time within 5 minutes of actual time is required for validation
- NTP sync prevents clock drift on servers and VMs
- Proxy SSL inspection replaces certificates with proxy-signed versions
- Antivirus HTTPS scanning can inject its own CA into the trust chain
- Test from multiple networks and devices to identify proxy or local trust issues
Comparison Summary and Recommendations
For production websites with public domain names, use Let's Encrypt. It's free, automated, and trusted by every browser. There's no reason to use a self-signed certificate for a public-facing site, and commercial CAs only make sense if you need organization validation or already have a support contract.
For local development and internal tools, self-signed certificates are fine as long as you install them in your local trust store to avoid constant security warnings. Don't expose them to external users.
If you're already using a valid certificate but still seeing the error, check for missing intermediate certificates first. Run openssl s_client to verify the chain, then fix your server configuration to serve the full chain. This is the most common cause I've seen in support tickets after self-signed certificates.
Commercial CAs make sense in regulated industries where auditors expect to see OV or EV certificates, or when you're consolidating vendor relationships and want a single support contact. For pure technical capability, they're identical to Let's Encrypt at domain validation level.
System time and proxy issues are environmental problems, not certificate problems. Fix the root cause—enable NTP, install proxy certificates, or adjust antivirus settings—rather than working around them by disabling certificate validation.
Quick troubleshooting checklist
- Check certificate expiration date with openssl s_client or browser devtools
- Verify the complete certificate chain is configured on your web server
- Confirm server system time is within 5 minutes of actual time
- Test certificate with SSL Labs or similar scanning tool
- Check that domain name matches certificate CN or SAN entries
- Verify firewall allows outbound traffic on port 80 for ACME challenges
- Review web server error logs for certificate loading failures
- Test from multiple browsers and devices to isolate client-side trust issues
FAQ
What causes NET::ERR_CERT_AUTHORITY_INVALID in Chrome and Firefox?
The browser can't verify the certificate's issuing authority. This happens when you use a self-signed certificate without installing it in the client's trust store, when intermediate certificates are missing from the server configuration, when the root CA has expired or been removed from the browser's trust list, or when the system clock is wrong and causes time-based validation to fail.
Can I use a self-signed certificate for a production website?
No. Self-signed certificates will trigger security warnings for every visitor because browsers don't trust certificates that aren't signed by a recognized certificate authority. Use Let's Encrypt for free automated certificates or a commercial CA if you need extended validation. Self-signed certificates are only appropriate for internal development environments or private networks where you control all client devices.
How do I fix missing intermediate certificates on nginx or Apache?
Concatenate your certificate and the CA's intermediate certificates into a single file in the correct order: your certificate first, then intermediates, then optionally the root. For nginx, reference this combined file in the ssl_certificate directive. For Apache, use SSLCertificateFile for your cert and SSLCertificateChainFile for intermediates, or combine them like nginx. You can download intermediate certificates from your CA's website or extract them from the .crt bundle they provided.
Related articles
- Hosting OperationsSelf-Hosted App Deployment Fails? Check DNS, SSL, Reverse Proxy, and Logs FirstTroubleshoot failed self-hosted app deployments by checking DNS, SSL, reverse proxy routing, container status, logs, and ports.
- Hosting OperationsSelf-Hosted PaaS on a VPS: What to Check Before Installing Coolify, Dokploy, or CapRoverA hosting support checklist for preparing a VPS before installing self-hosted PaaS tools like Coolify, Dokploy, or CapRover.
- Hosting OperationsLinux Server Security Lessons from the Arch Linux Malware Package IncidentPractical Linux server security checklist for VPS admins after package malware concerns, with safe checks, rollback steps, and support guidance.
- Hosting OperationsAWS Lightsail Hong Kong VPS Latency: Practical Hosting Guide for IndonesiaLearn how to test AWS Lightsail Hong Kong VPS latency, compare regions, migrate safely, and troubleshoot hosting performance.
- Hosting OperationsCloudflare Tomorrow Watchlist: A Practical Hosting Operations GuidePractical Cloudflare troubleshooting checklist for DNS, SSL, caching, WAF, origin health, safe testing, and rollback planning.
- Hosting OperationsNetwork Safety Checklist for AI Agent Skills in Hosting OperationsAudit AI agent skills safely with network checks, secret protection, sandbox testing, rollback steps, and hosting support troubleshooting guidance.