Skip to content

Commit a7db633

Browse files
Matt WilliamsMatt Williams
authored andcommitted
feat: Create comprehensive API security article series with SEO optimization
- Split original api-design-first-security-guide.md into 6 focused articles - Remove Redocly branding to create vendor-neutral security content - Add 3 strategic Mermaid diagrams (#4, #5, #7) for visual learning New Articles Created: • learn/security/index.md - Main landing page with article overview • api-tls-encryption-https-best-practices.md - TLS 1.3, HTTPS, mTLS guide • api-input-validation-injection-prevention.md - Schema validation, SQL injection prevention • api-rate-limiting-abuse-prevention.md - DoS protection, rate limiting algorithms • authentication-authorization-openapi.md - JWT, OAuth2, security schemes • api-design-first-security-governance.md - Automated governance, policy-as-code Navigation & UX Improvements: • Updated learn/security/sidebars.yaml with organized article structure • Enhanced pages/learning-center/cards.ts with all 6 security articles • Added strategic cross-links between related security topics • Implemented target='_blank' links to preserve user navigation context • Fixed URLs to use clean paths without .md extensions Content Quality: • Each article SEO-optimized with focused keywords and standalone value • Comprehensive cross-referencing between security domains • Real-world case studies: Heartbleed, Equifax, Facebook phone scraping • Practical code examples and governance rule implementations • Progressive learning path from infrastructure to organizational maturity
1 parent ed55635 commit a7db633

9 files changed

+3348
-135
lines changed

learn/security/api-design-first-security-governance.md

Lines changed: 968 additions & 0 deletions
Large diffs are not rendered by default.

learn/security/api-design-first-security-guide.md

Lines changed: 158 additions & 125 deletions
Large diffs are not rendered by default.

learn/security/api-input-validation-injection-prevention.md

Lines changed: 384 additions & 0 deletions
Large diffs are not rendered by default.

learn/security/api-rate-limiting-abuse-prevention.md

Lines changed: 448 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 327 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,327 @@
1+
# TLS Encryption and HTTPS Best Practices for APIs
2+
3+
_Protect data in transit with proper TLS configuration, certificate management, and HTTPS enforcement using OpenAPI security contracts._
4+
5+
---
6+
7+
## Key Takeaways
8+
9+
When a client and an API exchange information, that data travels across the internet, a public network. Without protection, this data gets intercepted and read by malicious actors. This is where encryption comes in.
10+
11+
**In this guide, you'll learn:**
12+
- How TLS 1.3 provides secure communication for APIs
13+
- OpenAPI server URL security contracts and enforcement
14+
- Certificate management and cipher suite selection
15+
- Mutual TLS (mTLS) for service-to-service communication
16+
- Real-world lessons from the Heartbleed vulnerability
17+
- Automated governance for transport security
18+
19+
---
20+
21+
## The Banking Vault Principle
22+
23+
> **The Banking Vault Principle**: When banks transfer large sums between branches, they don't send cash in regular envelopes. They use armored vehicles with multiple security layers. TLS encryption works similarly — it creates a secure transport layer that protects your API data during transit, even across untrusted networks.
24+
25+
**Encryption in transit** works similarly, creating a secure, private tunnel for API data as it moves between the client and the server.
26+
27+
## TLS 1.3: The Modern Standard
28+
29+
This secure tunnel is primarily established using **Transport Layer Security (TLS) version 1.3**, as specified in [IETF RFC 8446](https://tools.ietf.org/html/rfc8446). [NIST SP 800-52 Rev. 2](https://csrc.nist.gov/publications/detail/sp/800-52/rev-2/final) guidelines for TLS implementations unequivocally mandate TLS 1.3 for modern systems, as older protocols—including all versions of SSL, TLS 1.0, and TLS 1.1—are deprecated and considered insecure due to known vulnerabilities.
30+
31+
When a client connects to an API over `https://`, it initiates a "TLS handshake." During this handshake, the client and server perform crucial steps:
32+
33+
1. **Authentication:** The server presents its TLS certificate to the client to prove its identity, ensuring the client is talking to the legitimate server and not an impostor.
34+
2. **Agreement on Encryption:** They agree on a set of cryptographic algorithms (a "cipher suite") to use for the session.
35+
3. **Key Exchange:** They securely generate and exchange unique session keys that will be used to encrypt and decrypt all data for the remainder of the conversation.
36+
37+
### TLS Handshake Process
38+
39+
```mermaid
40+
sequenceDiagram
41+
participant C as Client
42+
participant S as Server
43+
44+
Note over C,S: TLS Handshake Process
45+
46+
C->>S: 1. Client Hello (Supported cipher suites)
47+
48+
S->>C: 2. Server Hello + Certificate
49+
Note right of S: Server presents TLS certificate to prove identity
50+
51+
C->>C: 3. Certificate Validation
52+
Note left of C: Client verifies server certificate is trusted
53+
54+
C->>S: 4. Cipher Suite Selection
55+
Note over C,S: Both agree on cryptographic algorithms
56+
57+
C->>S: 5. Key Exchange
58+
S->>C: 6. Key Exchange Complete
59+
Note over C,S: Generate and exchange unique session keys
60+
61+
Note over C,S: 🔒 Secure Communication Begins
62+
63+
C->>S: Encrypted API Request
64+
S->>C: Encrypted API Response
65+
66+
```
67+
68+
*Sequence diagram illustrating the TLS handshake process between client and server, showing certificate validation, cipher suite selection, and secure key exchange that ensures encrypted API communication.*
69+
70+
## TLS Security Guarantees
71+
72+
TLS, when done right, provides three essential security guarantees:
73+
74+
* **Confidentiality:** It encrypts the data, preventing eavesdroppers from reading it.
75+
* **Integrity:** It ensures that the data has not been altered or tampered with during transit.
76+
* **Authentication:** It verifies the identity of the server, protecting against man-in-the-middle attacks.
77+
78+
This is why secure APIs always use URLs that start with `https://` instead of `http://`. The 's' stands for 'secure' and indicates that the connection is protected by TLS encryption.
79+
80+
## TLS Implementation Best Practices
81+
82+
In production environments, telling teams to "use HTTPS" without specifics sometimes leads to misconfigured TLS and a false sense of security. Proper TLS implementation requires:
83+
84+
* **Enforcing Strong Cipher Suites**: Configure servers to only negotiate cryptographic algorithms that are considered secure, disabling weak or obsolete ciphers
85+
* **Proper Certificate Management**: Use certificates from trusted Certificate Authorities (CAs), ensure they are not expired, and implement robust processes for certificate issuance, renewal, and revocation
86+
* **Protection Against Man-in-the-Middle (MiTM) Attacks**: Implement HTTP Strict Transport Security (HSTS) to instruct browsers to only communicate over HTTPS, preventing protocol downgrade attacks
87+
88+
### Common TLS misconfigurations
89+
90+
* Weak or legacy protocols enabled (SSL, TLS 1.0/1.1) — disable them explicitly
91+
* Missing HSTS header — add Strict-Transport-Security with long max-age
92+
* Mixed content or accidental HTTP endpoints — redirect to HTTPS at the edge
93+
* Expiring certificates — monitor expiry and automate renewal
94+
95+
Quick checks:
96+
97+
```bash
98+
# Verify protocol and cipher suites
99+
openssl s_client -connect api.example.com:443 -tls1_3 -cipher 'TLS_AES_256_GCM_SHA384' < /dev/null | grep -E 'Protocol|Cipher'
100+
101+
# Scan for common TLS issues
102+
testssl.sh --fast https://api.example.com
103+
```
104+
105+
> Expert insight: "Treat TLS as a product with owners and SLAs. We track TLS health on dashboards the same way we track latency and errors."
106+
107+
## Enforcing HTTPS in Your API Specification
108+
109+
The security contract for encrypted transit begins within the `servers` object of your OpenAPI specification. Every URL defined here must use the `https://` scheme—this isn't just documentation, it's a formal declaration of your API's secure endpoints.
110+
111+
**OpenAPI Servers Declaration:**
112+
```yaml {% title="openapi.yaml" %}
113+
servers:
114+
- url: https://api.production.com/v1
115+
description: Production Server
116+
- url: https://api.staging.com/v1
117+
description: Staging Server
118+
```
119+
120+
### Automated Governance Enforcement
121+
122+
Modern API governance tools can enforce HTTPS usage through automated validation rules. When integrated into your CI/CD pipeline, automated governance creates security gates. If a developer attempts to commit an OpenAPI file with insecure server URLs, the pipeline fails with a clear error message, preventing insecure configurations from ever reaching production.
123+
124+
> Learn more about implementing comprehensive governance policies in our [API Design-First Security Governance and Automation](api-design-first-security-governance.md) guide.
125+
126+
*Automated governance tools fail CI/CD builds when OpenAPI specifications use HTTP instead of HTTPS, requiring developers to fix security violations before deployment.*
127+
128+
## TLS Configuration Examples
129+
130+
Authoritative sources like the [Mozilla SSL Configuration Generator](https://ssl-config.mozilla.org/) provide excellent, up-to-date templates for secure server configurations across different platforms and security requirements.
131+
132+
**Nginx Configuration:**
133+
```nginx
134+
server {
135+
listen 443 ssl http2;
136+
server_name api.example.com;
137+
138+
# TLS 1.3 only
139+
ssl_protocols TLSv1.3;
140+
141+
# Strong cipher suites
142+
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;
143+
144+
# HSTS header
145+
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
146+
147+
# Certificate files
148+
ssl_certificate /path/to/certificate.crt;
149+
ssl_certificate_key /path/to/private.key;
150+
}
151+
```
152+
153+
**Express.js Configuration:**
154+
```javascript
155+
const https = require('https');
156+
const fs = require('fs');
157+
const express = require('express');
158+
159+
const app = express();
160+
161+
// HSTS middleware
162+
app.use((req, res, next) => {
163+
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
164+
next();
165+
});
166+
167+
const options = {
168+
key: fs.readFileSync('private.key'),
169+
cert: fs.readFileSync('certificate.crt'),
170+
// Force TLS 1.3
171+
secureProtocol: 'TLSv1_3_method'
172+
};
173+
174+
https.createServer(options, app).listen(443);
175+
```
176+
177+
## Attack Example: Heartbleed (TLS library vulnerability, 2014)
178+
179+
The Heartbleed bug (CVE-2014-0160) was a critical vulnerability in the OpenSSL library, not the TLS protocol itself. It allowed attackers to read up to 64KB of a server's memory by sending a malformed TLS heartbeat request. The server would respond with not only the small payload sent by the attacker but also adjacent memory contents, which could include session cookies, user credentials, and even the server's private encryption keys.
180+
181+
This incident demonstrates a crucial point: security is multi-layered. While an OpenAPI specification can enforce the *intent* of using secure transport (https://), it cannot prevent a runtime vulnerability in the underlying software stack. True "secure by design" requires both [design-time governance](api-design-first-security-governance.md) via OpenAPI linting and runtime security posture management, including diligent vulnerability scanning and patch management.
182+
183+
```mermaid
184+
sequenceDiagram
185+
participant A as Attacker
186+
participant S as Vulnerable Server (OpenSSL)
187+
188+
A->>S: TLS handshake
189+
A->>S: Malformed Heartbeat Request (len >> data)
190+
S-->>A: Memory contents leak (keys, session cookies)
191+
A->>S: Follow-on requests using stolen secrets
192+
```
193+
194+
*Sequence diagram showing the Heartbleed attack: malformed TLS heartbeat requests cause vulnerable OpenSSL servers to leak memory contents including encryption keys and session data.*
195+
196+
Why this matters: TLS is only as strong as its implementation. Monitoring and rapid patching for library CVEs are part of infrastructure security.
197+
198+
## Mutual TLS (mTLS): Two-Way Authentication
199+
200+
While standard TLS only authenticates the server to the client, **Mutual TLS (mTLS)** requires both parties to authenticate each other using certificates. This provides stronger security for high-trust scenarios and is essential for implementing zero-trust architecture principles.
201+
202+
**mTLS Use Cases:**
203+
- Microservice communication in zero-trust architectures where no network segment is inherently trusted
204+
- API-to-API authentication between organizations implementing defense-in-depth strategies
205+
- IoT device authentication in distributed systems
206+
- High-security financial and healthcare APIs requiring cryptographic identity verification
207+
208+
**OpenAPI mTLS Configuration:**
209+
```yaml {% title="openapi.yaml" %}
210+
components:
211+
securitySchemes:
212+
mtlsAuth:
213+
type: mutualTLS
214+
description: "Client certificate authentication"
215+
216+
# Apply to sensitive operations
217+
paths:
218+
/internal/payments:
219+
post:
220+
security:
221+
- mtlsAuth: []
222+
summary: "Process payment (internal service only)"
223+
```
224+
225+
**Implementation Example (Nginx):**
226+
```nginx
227+
server {
228+
listen 443 ssl http2;
229+
230+
# Server certificate
231+
ssl_certificate /path/to/server.crt;
232+
ssl_certificate_key /path/to/server.key;
233+
234+
# Require client certificates
235+
ssl_verify_client on;
236+
ssl_client_certificate /path/to/ca.crt;
237+
238+
# Pass client certificate info to backend
239+
proxy_set_header X-Client-Cert $ssl_client_cert;
240+
proxy_set_header X-Client-Verify $ssl_client_verify;
241+
}
242+
```
243+
244+
> **mTLS Best Practice**: Use mTLS for service-to-service communication and regular TLS + [JWT/OAuth2](authentication-authorization-openapi.md) for client-to-server communication.
245+
246+
## TLS Monitoring and Troubleshooting
247+
248+
### Certificate Monitoring
249+
```yaml {% title="prometheus.yml" %}
250+
groups:
251+
- name: tls_alerts
252+
rules:
253+
- alert: TLSCertificateExpiringSoon
254+
expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 30
255+
labels:
256+
severity: warning
257+
annotations:
258+
summary: "TLS certificate expires in less than 30 days"
259+
260+
- alert: WeakTLSVersion
261+
expr: probe_tls_version_info{version!="TLS 1.3"} == 1
262+
labels:
263+
severity: critical
264+
annotations:
265+
summary: "Weak TLS version detected"
266+
```
267+
268+
### Common TLS Troubleshooting Steps
269+
270+
**Certificate Issues:**
271+
- Expired certificates — monitor expiry dates and automate renewal
272+
- Certificate chain problems — verify intermediate certificates are included
273+
- Certificate-hostname mismatch — ensure certificate covers all domains used
274+
275+
**Configuration Issues:**
276+
- Weak cipher suites — disable deprecated algorithms and enable only strong ciphers
277+
- Missing HSTS headers — add Strict-Transport-Security to prevent downgrade attacks
278+
- Mixed content warnings — ensure all resources load over HTTPS
279+
280+
**Quick Verification Commands:**
281+
```bash
282+
# Test TLS connection and certificate
283+
curl -vI https://api.example.com 2>&1 | grep -E 'SSL|TLS|certificate'
284+
285+
# Verify certificate chain
286+
openssl s_client -showcerts -connect api.example.com:443 < /dev/null
287+
288+
# Check certificate expiry
289+
echo | openssl s_client -servername api.example.com -connect api.example.com:443 2>/dev/null | \
290+
openssl x509 -noout -dates
291+
```
292+
293+
## Frequently Asked Questions
294+
295+
### Why can't I use HTTP for internal APIs?
296+
Even internal networks can be compromised. Using HTTPS everywhere (zero-trust approach) protects against insider threats, lateral movement attacks, and accidental data exposure. The performance overhead of TLS is minimal with modern hardware and HTTP/2.
297+
298+
### How often should I rotate TLS certificates?
299+
Most organizations use certificates with 1-year validity and rotate them every 6-12 months. Automated certificate management tools like Let's Encrypt or cloud provider certificate services can handle this automatically.
300+
301+
### What's the difference between TLS and SSL?
302+
SSL (Secure Sockets Layer) is the predecessor to TLS. SSL versions are deprecated and insecure. When people say "SSL certificate" or "SSL/TLS," they're usually referring to modern TLS. Always use TLS 1.2 or preferably TLS 1.3.
303+
304+
### Should I implement certificate pinning for API clients?
305+
Certificate pinning can improve security by preventing man-in-the-middle attacks, but it adds operational complexity. Consider it for high-security applications, but ensure you have a robust certificate rotation and backup pin management process.
306+
307+
## Resources and Next Steps
308+
309+
### Essential Reading
310+
- [IETF RFC 8446](https://tools.ietf.org/html/rfc8446) - TLS 1.3 protocol specification and security requirements
311+
- [NIST SP 800-52 Rev. 2](https://csrc.nist.gov/publications/detail/sp/800-52/rev-2/final) - Official guidelines for secure TLS implementation
312+
- [Mozilla SSL Configuration Generator](https://ssl-config.mozilla.org/) - Generate secure TLS configurations for various platforms
313+
314+
### Implementation Tools
315+
- [Let's Encrypt](https://letsencrypt.org/) - Free, automated certificate authority for TLS certificates
316+
- [testssl.sh](https://testssl.sh/) - Command-line tool for testing TLS/SSL implementations
317+
- [SSL Labs Server Test](https://www.ssllabs.com/ssltest/) - Online tool for testing TLS configuration
318+
319+
### Related Security Topics
320+
- [API Input Validation and Injection Prevention](api-input-validation-injection-prevention.md) - Protect APIs from malicious data
321+
- [Authentication and Authorization with OpenAPI](authentication-authorization-openapi.md) - Implement secure access control
322+
- [API Rate Limiting and Abuse Prevention](api-rate-limiting-abuse-prevention.md) - Prevent DoS attacks and brute force attempts
323+
- [API Security by Design: Complete Guide](index.md) - Overview of all API security domains
324+
325+
---
326+
327+
**Next Steps:** Now that you have secure transport with TLS, learn about [API Input Validation and Injection Prevention](api-input-validation-injection-prevention.md) to protect your APIs from malicious data inputs.

0 commit comments

Comments
 (0)