~/notes/tls-deployment

TLS Deployment

Operational practices for deploying TLS with verifiable identities, automated renewal, and tested policy.

Jul 11, 2026

A secure TLS deployment starts with maintained platform defaults. Custom protocol, cipher, trust-manager, or hostname-verifier code creates policy that must be maintained as standards and attacks change.

For a normal Java HTTPS client, prefer the standard HttpClient and its default trust configuration. Build a custom SSLContext only for a concrete requirement such as a private trust store or mTLS client identity. Never install a trust-all manager or disable hostname verification to work around a certificate error.

Certificates

  • Automate issuance and renewal.
  • Monitor the certificate actually served from every public and internal endpoint.
  • Alert before expiry and test the renewal path.
  • Serve the required intermediate chain.
  • Keep private keys in a managed secret or key service with limited access.
  • Test rotation before an emergency.

A certificate’s DNS or IP identities must appear in subjectAltName; setting only CN=localhost is insufficient for a modern development certificate.

Protocol Policy

Prefer TLS 1.3 and retain TLS 1.2 only where compatibility requires it. Use a maintained configuration profile, such as Mozilla’s server-side recommendations, instead of assembling cipher lists from memory.

Explicitly use https:// resource URLs. Protocol-relative URLs inherit an insecure scheme when a page is reached over HTTP and make transport intent less clear.

HSTS

HTTP Strict Transport Security tells supporting browsers to use HTTPS for a host after receiving the policy over a valid HTTPS connection.

Roll it out in stages:

  1. verify every intended endpoint works over HTTPS;
  2. start with a short max-age;
  3. increase the duration after monitoring;
  4. add includeSubDomains only when every subdomain can remain HTTPS-only;
  5. request preload only after satisfying the preload program’s requirements.

A mistaken long-lived policy can make hosts unreachable until it expires. HSTS also does not protect a first visit unless the host is preloaded.

Verification

Test from outside the deployment boundary, because a local proxy or load balancer can hide the certificate and policy users receive. Check:

  • chain construction and hostname matching;
  • supported protocol versions and cipher suites;
  • HSTS headers on HTTPS responses;
  • renewal and rollback behavior;
  • expiry monitoring;
  • redirects without mixed HTTP resources.

Further Reading