Data Protection · Topic 1 of 7
TLS and Certificate Management
Manage TLS certificates with ACM and Private CA, enforce HTTPS on S3 and databases, and troubleshoot validation, renewal and Region problems.
- 5 min
- ACM public certificates are free for integrated services and auto renew when validated by DNS and in use.
- Imported certificates do not auto renew.
- CloudFront certificates must be in us-east-1. Other services use the same Region as the resource.
What it is
Transport Layer Security (TLS) encrypts data between a client and a server and lets the client check the server's identity with a certificate. For data in transit, the security design decides where TLS starts and ends, who issues the certificates, and how to force clients to use it.
AWS Certificate Manager (ACM) issues and manages certificates for AWS services. AWS Private Certificate Authority (Private CA) issues certificates for internal systems.
How it works
ACM public certificates
ACM issues public certificates for domain names you prove you control. Use them with integrated services such as Elastic Load Balancing, CloudFront and API Gateway. ACM keeps the private key, so you never handle the key file for these certificates.
# AWS CLI: request a certificate validated through DNS
aws acm request-certificate \
--domain-name example.com \
--subject-alternative-names "*.example.com" \
--validation-method DNS
Validation proves domain control.
| Method | How | Notes |
|---|---|---|
| DNS validation | Add a CNAME record that ACM gives you | Preferred, and enables automatic renewal while the record stays in place |
| Email validation | Reply to an email sent to domain contacts | Manual, and harder to automate |
ACM renews certificates it issued automatically, as long as they are in use with an integrated service and the validation record is still present. An imported certificate is not renewed by ACM, so you must replace it before it expires. ACM publishes expiry events to EventBridge, and you can alarm on days to expiry with Config or CloudWatch.
Where certificates must live
A certificate is Regional, so request it in the same Region as the load balancer or API.
For CloudFront, request it in us-east-1. An Application Load Balancer can hold several certificates on a listener and picks one using SNI (Server Name Indication).
Private CA
AWS Private CA lets you run your own certificate authority hierarchy without managing hardware. Use it for internal services, mutual TLS (mTLS) between microservices, devices, and Kubernetes workloads.
- Build a root CA and subordinate CAs, and use the root only to sign the subordinates.
- Issue short lived certificates to reduce the damage from key exposure.
- Publish revocation through a certificate revocation list (CRL) or OCSP (Online Certificate Status Protocol).
- Share a CA with other accounts through AWS Resource Access Manager (RAM).
- Private CA certificates can be exported to servers you manage, and certificates for ACM integrated services can also come from a private CA.
Clients must trust the private root. Distribute the root certificate to them through your management tooling.
Choosing
| Need | Choose |
|---|---|
| Public website behind ALB or CloudFront | ACM public certificate with DNS validation |
| Internal service to service TLS | Private CA |
| Certificate on an EC2 instance you manage | An exportable certificate, such as from Private CA, or an imported certificate |
| Third party certificate you already own | Import into ACM and track the expiry yourself |
Enforcing encryption in transit
Turning TLS on is not enough, because clients can still choose plain connections unless you refuse them.
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyInsecureTransport",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": ["arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*"],
"Condition": { "Bool": { "aws:SecureTransport": "false" } }
}]
}
This bucket policy denies any request not made over HTTPS. The same condition key works in policies for other resources, such as SQS and SNS.
| Service | How to require TLS |
|---|---|
| S3, SQS, SNS | Resource policy that denies when aws:SecureTransport is false |
| ALB | HTTPS listener with a security policy, and redirect HTTP to HTTPS |
| CloudFront | Viewer protocol policy of redirect or HTTPS only, and a minimum TLS version |
| RDS and Aurora | Database parameter that forces SSL, for example rds.force_ssl for PostgreSQL, and clients that verify the certificate |
| Redshift | Parameter require_ssl |
| Amazon EFS | Mount with the EFS mount helper and the tls option |
| API Gateway | HTTPS endpoints only, with a minimum TLS version for custom domains |
End to end encryption
When a load balancer terminates TLS, traffic from the load balancer to the target is plain unless you re-encrypt. For sensitive data, use HTTPS to the target, or use an NLB TCP listener for passthrough. The target certificate can be self signed on an ALB, because the ALB does not validate it, but a mutual TLS design should use a private CA.
Troubleshooting certificates
- Status stuck at pending validation means the DNS CNAME is missing or in the wrong zone.
- The certificate is not listed for CloudFront because it was requested outside us-east-1.
- Clients report a name mismatch when the domain is not in the certificate's names.
- A certificate in a failed state could not be validated within the allowed time.
- Imported certificates expire quietly, so set an alarm.
What to remember for the exam
- ACM public certificates are free for integrated services and auto renew when validated by DNS and in use.
- Imported certificates do not auto renew.
- CloudFront certificates must be in us-east-1. Other services use the same Region as the resource.
- Prefer DNS validation, since it supports automatic renewal.
- Use Private CA for internal TLS and mTLS, with CRL or OCSP for revocation.
- Enforce TLS with
aws:SecureTransportin resource policies, and force SSL parameters on databases. - Terminating TLS at a load balancer leaves the next leg unencrypted unless you re-encrypt or use passthrough.
- EFS encrypts data in transit when mounted with the
tlsoption.
For "all connections to the bucket must use HTTPS", the answer is a deny statement on aws:SecureTransport equal to false, not just an HTTPS listener.
Common mistakes
Assuming a certificate renews itself when imported. Only ACM issued certificates renew, and imported ones need manual replacement.
Requesting the certificate in the wrong Region. The ALB or CloudFront will not show it.
Removing the validation CNAME. Renewal then fails because ACM cannot re-validate the domain.
Assuming an HTTPS listener means end to end encryption. The back end leg may still be unencrypted.
A deny on aws:SecureTransport also blocks any internal client that uses plain HTTP, so check your applications before enforcing it.
Check yourself
Why use DNS validation for ACM certificates?
ACM can renew the certificate automatically while the validation CNAME record stays in DNS.
Where must a certificate for CloudFront be requested?
In us-east-1.
How do you force all S3 requests to use TLS?
Add a bucket policy that denies requests when
aws:SecureTransportis false.
Topic 1 of 7 in Data Protection
Test yourself on Data Protection
The full AWS SCS-C03 question bank has 858 questions, with timed practice exams and an explanation for every answer.
This study guide is independent and is not affiliated with, endorsed by, or sponsored by AWS. Vendor names, certification names and exam codes are trademarks of their respective owners and are used for identification only.