Self-Signed vs CA-Signed
A self-signed certificate is one where the issuer and subject are the same entity — the certificate signs itself. A CA-signed certificate is issued (and signed) by a Certificate Authority that clients already trust. The distinction matters for trust, automation, and operational complexity.
Key Differences
| Aspect | Self-Signed | CA-Signed |
|---|---|---|
| Trust | Must be manually distributed | Trusted via pre-installed root CAs |
| Browser UX | Security warning | Green lock / no warning |
| Cost | Free | Free (Let's Encrypt) to $$$ |
| Revocation | No infrastructure | OCSP / CRL by CA |
| Automation | Manual or custom scripts | ACME, certbot, cloud integrations |
When to Use Self-Signed
- Local development — use
dotnet dev-certs https --trustor mkcert to avoid browser warnings. - Internal services — mTLS between microservices where you control both ends and can distribute the CA certificate.
- Testing and CI — ephemeral certificates for integration test environments.
- Air-gapped networks — environments with no internet access to reach a public CA.
When to Use CA-Signed
- Public-facing websites and APIs — browsers and mobile clients need to trust you automatically.
- Third-party integrations — partners expect a publicly trusted certificate.
- Compliance requirements — PCI-DSS, SOC 2, and similar standards require CA-issued certificates.
Decision Flowchart
- Will external clients or browsers connect? Yes→ Use a CA-signed certificate.
- Is this for development or testing only? Yes→ Self-signed is fine.
- Do you control all connecting clients? Yes→ Internal CA or self-signed with trust distribution.
- Do you need automated renewal? Yes→ Consider Let's Encrypt (free, ACME-automated).
- Is cost a constraint? Yes→ Let's Encrypt or ZeroSSL offer free DV certificates.
Internal PKI: The Middle Ground
Many organizations operate their own internal CA (using tools like Active Directory Certificate Services, step-ca, or cfssl). This gives you the automation and revocation infrastructure of a public CA while keeping full control. Clients within your network trust your root CA via Group Policy, MDM, or configuration management.
Tip
Never disable certificate validation in production code. If you find yourself writing ServerCertificateCustomValidationCallback = (_, _, _, _) => true, stop and fix the certificate setup instead.
Need a self-signed certificate for development? Try the Self-Signed Generator to create one with custom SANs directly in your browser.