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
In a nutshell
  • 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.

Clientbrowser or appTLS handshakeLoad balancer or CloudFrontACM certificateTLS or plainTargetinstance or origin

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.

MethodHowNotes
DNS validationAdd a CNAME record that ACM gives youPreferred, and enables automatic renewal while the record stays in place
Email validationReply to an email sent to domain contactsManual, 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

NeedChoose
Public website behind ALB or CloudFrontACM public certificate with DNS validation
Internal service to service TLSPrivate CA
Certificate on an EC2 instance you manageAn exportable certificate, such as from Private CA, or an imported certificate
Third party certificate you already ownImport 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.

ServiceHow to require TLS
S3, SQS, SNSResource policy that denies when aws:SecureTransport is false
ALBHTTPS listener with a security policy, and redirect HTTP to HTTPS
CloudFrontViewer protocol policy of redirect or HTTPS only, and a minimum TLS version
RDS and AuroraDatabase parameter that forces SSL, for example rds.force_ssl for PostgreSQL, and clients that verify the certificate
RedshiftParameter require_ssl
Amazon EFSMount with the EFS mount helper and the tls option
API GatewayHTTPS 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.

ClientHTTPSALBterminates TLSHTTPS againInstanceown certificate

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:SecureTransport in 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 tls option.
Exam tip

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.

Watch out

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:SecureTransport is 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.