Choosing Between Public Certificates and Private CA: Decision Framework#
When you’re securing applications on AWS, one of the first decisions you’ll face is how to handle certificates. Should you use AWS Certificate Manager (ACM) public certificates, or should you invest in AWS Certificate Manager Private CA? The answer isn’t “one size fits all”—it depends entirely on your use case, your architecture, and your security requirements. Let’s build a framework that helps you choose confidently.
Understanding the Two Certificate Paths#
AWS offers two fundamentally different certificate solutions through Certificate Manager, and they solve different problems.
Public certificates are issued by AWS Certificate Manager for your internet-facing resources. These are certificates signed by a trusted public certificate authority, which means browsers and clients automatically recognize them as legitimate. When someone visits your CloudFront distribution or connects to your Application Load Balancer, their browser sees a certificate that chains back to a globally trusted root CA. This trust is baked into every modern browser and operating system out of the box.
Private CA certificates come from a certificate authority that you control and operate within your own AWS account. These certificates don’t chain to a public root—instead, they chain to a CA that you’ve explicitly configured. This means clients need to be configured to trust your private CA before they’ll accept certificates issued from it. It sounds more complex because it is, but that complexity buys you something valuable: complete control over certificate issuance, revocation, and policy.
The fundamental distinction is about trust scope. Public certificates tap into the global trust infrastructure. Private CA certificates establish trust only within environments where you’ve explicitly installed your CA certificate.
When Public Certificates Make Sense#
Public certificates are the default choice for anything that needs to communicate with the general internet. If your resource is accessed by browsers, mobile apps, IoT devices, or third-party integrations that you don’t control, public certificates are practically mandatory.
Consider a typical web application scenario. You’re running an e-commerce platform behind CloudFront and an Application Load Balancer. Your customers access it from all over the world, using different devices and browsers. You need encryption in transit, and you need it to work seamlessly. A public certificate handles this without any configuration required on the client side. Your users’ browsers trust ACM’s issuing CA automatically.
Another compelling use case is API integrations with external partners. If you’re exposing an API that third parties will call, a public certificate ensures they can verify your server’s identity without asking them to install custom CA certificates. This is especially important when you have no control over their network configuration or security policies.
Public certificates also excel in scenarios where you need flexibility in scaling. Since ACM manages the entire certificate lifecycle automatically—including renewal—you don’t need to maintain infrastructure or processes around certificate management. AWS handles this for you, and it’s completely free.
Here’s a practical example: you’re launching a SaaS product and you need TLS for your API endpoints. You use an Application Load Balancer fronting your backend services. You request a public certificate from ACM for your domain, validate it via DNS (which typically takes minutes), and attach it to the ALB. Your customers can immediately connect securely, and AWS automatically renews the certificate 30 days before expiration. You don’t need to do anything.
The cost structure here is particularly appealing. Public certificates through ACM are free. You’re not paying per certificate, and there’s no recurring fee. You pay for the resources that use the certificates (like ALB or CloudFront), but the certificate itself costs nothing.
When Private CA Becomes Essential#
Private CA enters the picture when you’re securing infrastructure that shouldn’t be publicly accessible or when you need granular control over certificate policy and issuance.
The clearest use case is internal microservices communication. Imagine a microservices architecture where Service A needs to call Service B, and you want mutual TLS (mTLS) authentication. Both services need certificates, and you want to ensure only authorized services in your infrastructure can communicate with each other. A private CA lets you issue certificates only to services you control, with policies and constraints you define. You can revoke a service’s certificate immediately if it’s compromised, enforce certificate expiration windows that match your deployment cycles, and audit every certificate issued.
IoT device authentication is another natural fit for private CA. When you’re provisioning thousands of IoT devices, each needing a unique certificate, you want that certificate authority to be part of your infrastructure. You might issue a certificate valid for two years, but you want the ability to revoke it instantly if a device is lost or stolen. With a private CA, this is straightforward. With public certificates, revocation is more complex and less commonly used in practice.
Database encryption is another scenario where private CA shines. If you’re running Amazon RDS and you want to encrypt traffic between your application and the database, you need certificates that both the application and database can present. A private CA lets you issue certificates to the database with a common name and constraints that make sense for your infrastructure. You maintain complete control over who can validate the database certificate.
Consider internal APIs between microservices in a highly regulated environment. You might have compliance requirements that demand you audit every certificate issued, control certificate lifespans precisely, or implement specific revocation procedures. A private CA gives you this control. You can set policies about key algorithms, certificate validity periods, and organizational attributes. You can integrate certificate issuance into your deployment pipeline and enforce that only authenticated services receive certificates.
Private CA also becomes essential when you need certificates for internal hostnames that don’t exist on the public internet. You might have an internal service running on auth-service.internal that only exists within your VPC. A public certificate authority can’t issue a certificate for this because they validate domain ownership, and .internal isn’t a real domain. A private CA has no such restriction—you can issue a certificate for any hostname you need.
The Cost Calculus#
This is where the decision tree often becomes clearer. Public certificates are free, but private CA has real costs that should factor into your decision.
Operating a private CA costs approximately $400 per month in AWS, plus additional charges for certificate requests and revocations. For a small organization with a handful of microservices, this might be prohibitively expensive. For a large enterprise issuing hundreds of certificates across a complex infrastructure, it might be a rounding error in the security budget.
But cost isn’t the only consideration. If you’re using private CA, you’re also taking on operational responsibility. You need to monitor the CA’s certificate expiration, manage the CA’s own key material securely, implement and test certificate revocation procedures, and potentially integrate certificate issuance into your CI/CD pipeline. These operational costs—in engineering time and systems complexity—often exceed the monthly AWS fee.
There’s a break-even point. If you have a large internal infrastructure with dozens of services and you need mTLS everywhere, private CA is likely worth it. If you have a handful of internal services and you can secure them differently (perhaps with API keys or IAM authentication), private CA might be unnecessary overhead.
Here’s a concrete comparison: a startup with five microservices might use API Gateway with AWS IAM for service-to-service authentication, completely avoiding the need for private CA. A large financial institution with hundreds of internal services might run a private CA and require mTLS for all east-west traffic as a security control. The technology isn’t better or worse—it’s right or wrong depending on your scale and requirements.
Decision Matrix: Real-World Scenarios#
Let’s work through several scenarios to see how the decision framework plays out in practice.
Scenario 1: CloudFront Distribution for a Static Website
You’re hosting a marketing website on S3 and distributing it through CloudFront. You need HTTPS. This is a straightforward public certificate scenario. Your customers access the site from browsers around the world. You request a public certificate for example.com in ACM, validate it via DNS, and attach it to the CloudFront distribution. Cost: $0 for the certificate. Renewal: automatic. Client configuration: none required.
Scenario 2: Internal Service-to-Service Communication with mTLS
You have a Kubernetes cluster running on EKS with ten microservices that need to authenticate each other. You want mutual TLS so that Service A can verify it’s actually talking to Service B, and vice versa. Each service needs a certificate. A private CA is the right tool here. You set up private CA, issue certificates to each service (either through a service mesh like AWS App Mesh or through a bootstrap process), and configure mTLS. You control the certificate policy, you can revoke certificates if needed, and you have audit logs. Cost: $400/month plus per-request fees. But this is a legitimate security control for your infrastructure.
Scenario 3: IoT Devices Connecting to AWS IoT Core
You’re manufacturing smart devices and each one needs to authenticate to AWS IoT Core. You might manufacture thousands of devices. Each needs a unique certificate. AWS IoT Core works great with private CA certificates—you can use AWS IoT Core’s integration with private CA to issue certificates automatically as devices are provisioned. When a device is stolen or reaches end-of-life, you revoke its certificate. This is a perfect use case for private CA. Public certificates would be awkward and impractical here (you can’t reasonably issue thousands of public certificates for device-specific identifiers).
Scenario 4: RDS Database Encryption
You’re running a PostgreSQL database on RDS and you want to enforce TLS connections from your application. Your application needs to trust the database’s certificate, and the database needs to present a certificate. A private CA makes sense here. You issue a certificate to the RDS instance with a common name that matches your database endpoint. Your application is configured to validate the certificate. You maintain complete control over the CA and can revoke the certificate if necessary. Cost is a concern only if this is your only use case—private CA’s monthly fee won’t be justified for a single certificate.
Scenario 5: Public REST API for Third-Party Integrations
You’re exposing a REST API that partners will integrate with. You have an API Gateway deployment backed by Lambda functions. You need a certificate that third parties can validate with their browsers or API clients. A public certificate is the right choice. You request it in ACM, validate ownership of your domain, and attach it to the API Gateway. Your partners can connect without any special configuration. Cost: $0. Renewal: automatic.
Scenario 6: Internal Hostname Not on the Public Internet
You have an internal service running on payments-service.mycompany.internal inside your VPC. This hostname doesn’t exist on the public internet, so you can’t get a public certificate for it (ACM public would reject this because .internal isn’t a real TLD and it can’t validate domain ownership). A private CA is your only option. You create a certificate for this internal hostname and install your CA’s certificate on client systems so they trust it.
Implementation Considerations#
Beyond the certificate type itself, a few practical considerations should influence your choice.
Automation and renewal: Public certificates are renewed automatically by ACM. You set it and forget it. With private CA, you need to think about renewal—you can set certificates to renew automatically before expiration, but this requires more operational planning. If you’re using certificates across a distributed fleet of servers, automatic renewal becomes increasingly important.
Validation methods: Public certificates require domain validation. ACM supports DNS validation (recommended) and email validation. DNS validation is automated and clean—you add a CNAME record that ACM can check, and validation completes in minutes. This works great if you manage your DNS. Email validation is more cumbersome. Private CA has no validation requirement because you control the CA directly.
Revocation: Public certificates can be revoked through ACM, but in practice, revocation is less commonly used (browsers don’t check revocation status reliably anymore). Private CA gives you more straightforward revocation—you can revoke a certificate, and clients that properly validate revocation status will recognize it as revoked. This matters if you need to quickly invalidate a compromised certificate.
Certificate attributes and constraints: Private CA lets you set detailed certificate constraints—key usage, extended key usage, organizational attributes, and more. If you have specific requirements around these attributes, private CA provides flexibility. Public certificates have standard attributes that work for most internet-facing scenarios.
Audit and compliance: Private CA provides detailed audit logs of every certificate issued and revoked. If you have compliance requirements demanding certificate audit trails, private CA is more suitable. Public certificates are still auditable through ACM, but private CA gives you more granular control.
A Practical Decision Flow#
Here’s how to approach the decision in your own projects:
Start by asking: Is this resource internet-facing and accessed by untrusted clients? If yes, use a public certificate. If no, continue.
Next: Do I need mutual authentication, mTLS, or detailed control over certificate issuance policy? If yes, private CA is worth considering. If no, continue.
Then: What’s the cost-benefit ratio for my scale? If you’re issuing dozens of certificates, private CA might make sense operationally and financially. If you’re issuing one or two, the monthly fee probably isn’t justified.
Finally: Do I have the operational capacity to manage a CA? Private CA isn’t fire-and-forget. You need to monitor it, handle renewals, implement revocation if needed, and potentially integrate it into your deployment pipeline. If your team isn’t ready for that, stick with public certificates where possible or use alternative security mechanisms (like API keys or IAM roles).
Hybrid Approaches#
It’s worth noting that many organizations use both. You might run public certificates for your customer-facing APIs and applications, while running a private CA for internal service communication. This is a common and sensible architecture. You’re using the right tool for each job rather than forcing everything into one approach.
You might also layer security mechanisms. For example, you could use public certificates for encryption in transit, combined with AWS Secrets Manager for API keys, combined with IAM policies for service-to-service authentication. Not everything that looks like a certificate problem is best solved with certificates.
Conclusion#
The choice between public certificates and private CA isn’t technical rocket science—it’s fundamentally about scope and control. Public certificates tap into global trust infrastructure and work seamlessly for anything the internet can access. They’re free, automatically renewed, and require minimal operational overhead. Private CA gives you complete control over certificate issuance, policy, and revocation, which matters when you’re securing internal infrastructure or need granular security controls.
As you design your AWS architecture, ask yourself three questions: Who needs to trust this certificate? Do I need control over issuance policy and revocation? Can I afford the operational and financial costs of private CA? Answer those honestly, and the right choice usually becomes clear. In most cases, you’ll find yourself using public certificates for customer-facing applications and private CA—if at all—for security-critical internal infrastructure where that investment pays off.