Glossary

SSL Offloading (TLS offloading)

Last verified

Definition

SSL offloading is moving the CPU work of TLS handshakes and encryption from application servers to a dedicated proxy, load balancer or hardware device.

SSL offloading is the performance and operations motive behind terminating TLS in front of an application. A dedicated component, such as a load balancer, application delivery controller, reverse proxy, or a server with a cryptographic accelerator or HSM, performs the handshakes, holds the certificates and encrypts and decrypts traffic, so application servers handle only HTTP. Two variants are common: pure offloading, where traffic to the backend is plaintext, and SSL bridging (re-encryption), where the proxy decrypts, inspects or routes the request and then opens a new TLS connection to the backend.

Why it matters

The expensive part of TLS is the public-key operation in each handshake; bulk encryption with AES-GCM is cheap on CPUs with AES hardware instructions, and ECDSA certificates make handshakes cheaper than RSA ones. On modern hardware the benefit of offloading is therefore often less about CPU than about managing certificates, renewal, protocol versions and cipher policy in one place. The trade-off is the plaintext hop. Pure offloading is acceptable only on a trusted, isolated network segment; compliance requirements, shared cloud networks and zero-trust designs usually call for bridging. When bridging, the proxy must verify the backend's certificate, otherwise the second hop is open to interception.

Example

Bridging with nginx. nginx does not verify upstream certificates by default, so verification has to be switched on:

location / {
    proxy_pass https://backend.internal:8443;
    proxy_ssl_server_name on;
    proxy_ssl_name backend.internal;
    proxy_ssl_verify on;
    proxy_ssl_trusted_certificate /etc/nginx/internal-ca.pem;
}

For pure offloading, proxy_pass http://10.0.0.11:8080; replaces the upstream TLS settings.

Common misconceptions

  • Offloading is required because TLS is too heavy for application servers. With AES hardware support and ECDSA keys the overhead on modern servers is usually modest; decide based on architecture and certificate management.
  • proxy_pass https:// means the backend is authenticated. nginx encrypts the hop but skips certificate verification unless proxy_ssl_verify on is set.
  • Offloading and termination are the same thing. TLS termination names where the client's TLS ends; offloading is the decision to put that work on dedicated infrastructure, with or without re-encryption.

See also