0-RTT data can be replayed by an attacker who captures the client’s initial message. Only enable 0-RTT for idempotent, safe-to-replay requests (e.g., GET requests, non-critical analytics). Never Use 0-RTT for authentication, payment, or state-changing requests.
In mTLS, both the client and the server present certificates. This provides strong authentication:
# Nginx: require client certificates
ssl_client_certificate /etc/nginx/ca.crt;
# Generate a client certificate signed by your CA
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out client.key
openssl req -new -key client.key -out client.csr \
-subj "/CN=service-account/O=MyOrg"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out client.crt -days 365 -sha256
curl --cert client.crt --key client.key https://example.com/api
| Use Case | Why mTLS |
|---|
| Service-to-service communication | Stronger than API keys, no shared secrets |
| Internal APIs | Replaces VPN for some architectures |
| IoT devices | Device identity and authentication |
| Zero-trust network access | Identity-based access control |
Certificate Transparency (CT) is a system for publicly logging all issued certificates. Browsers Require CT log inclusion for publicly trusted certificates:
curl -s "https://crt.sh/?q=example.com&output=json" | python3 -m json.tool
# Monitor for unauthorized certificates
# Set up alerts for new certificate entries for your domain
HTTP Public Key Pinning (HPKP) was a mechanism to pin specific public keys for a domain. It has been removed from all major browsers due to the risk of misconfiguration (which could permanently Block access to a site):
# Public-Key-Pins: pin-sha256="base64=="; max-age=5184000; includeSubDomains
# If you pinned the wrong key, your site becomes inaccessible for the max-age duration
# Chrome removed support in Chrome 69 (2018)
# Cron job: alert when certificates expire within 30 days
DOMAINS=("example.com" "api.example.com" "cdn.example.com")
for domain in "${DOMAINS[@]}"; do
expiry_date=$(echo | openssl s_client -connect $domain:443 \
-servername $domain 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ -n "$expiry_date" ]; then
expiry_epoch=$(date -d "$expiry_date" +%s)
current_epoch=$(date +%s)
days_left=$(( (expiry_epoch - current_epoch) / 86400 ))
if [ $days_left -lt $THRESHOLD_DAYS ]; then
echo "WARNING: $domain expires in $days_left days ($expiry_date)"
# Send alert (email, Slack, PagerDuty)
echo "ERROR: Could not retrieve certificate for $domain"
# Automated SSL Labs scan
# https://www.ssllabs.com/ssltest/analyze.html?d=example.com
# API-based scan (requires registration)
curl "https://api.ssllabs.com/api/v3/analyze?host=example.com&publish=off&startNew=on"
# https://observatory.mozilla.org/
# Tests security headers, TLS configuration, and more
Let’s Encrypt enforces strict rate limits:
| Limit Type | Restriction |
|---|
| Certificates per domain | 50 per week (per registered domain) |
| Failed validations | 5 per account per hostname per hour |
| Duplicate certificates | 5 per week (same exact set of names) |
| Registered domains | 300 per account |
Exceeding these limits blocks certificate issuance. Use the staging environment for testing:
# Let's Encrypt staging (certificates are NOT trusted)
certbot --staging certonly --webroot -w /var/www/html -d example.com
The most common TLS deployment error is incorrect chain ordering. The chain file must contain the Server certificate first, followed by intermediate certificates in order (leaf to root). Nginx Requires the full chain in a single file:
# Correct: server cert + intermediate
cat server.crt intermediate.crt > fullchain.pem
# Wrong: intermediate first
cat intermediate.crt server.crt > fullchain.pem
# This causes "certificate verify failed" errors in some clients
Modern browsers and TLS clients ignore the CN (Common Name) field and only use SAN. If your Certificate lacks a SAN for the domain, it will be rejected:
# Verify SAN on a certificate
openssl x509 -in cert.pem -noout -text | grep -A1 "Subject Alternative Name"
While TLS 1.0 and 1.1 are deprecated (RFC 8996), some legacy clients still require them. Disable Them only after auditing client requirements. PCI DSS 3.2.1 mandated disabling TLS 1.0 by June 2018 And TLS 1.1 by June 2019.
This topic covers the mathematical techniques and concepts related to tls in practice, including key theorems, methods, and problem-solving approaches.
Key concepts include:
- fundamental definitions and theorems
- algebraic and graphical methods
- proof and logical reasoning
- problem-solving strategies
- applications and modelling
Regular practice with a variety of question types is essential to build fluency and confidence in applying these mathematical techniques.
Worked examples demonstrating the application of key concepts are covered in the detailed sub-pages linked above.