mTLS (mutual TLS)

Mutual TLS (mTLS) adds client certificate verification on top of normal server TLS. This is useful for internal admin panels, partner integrations, and service-to-service traffic.

Require client certificates

Configure client certificate validation against your internal CA:

globals {
    // Verify client certificates using this CA file.
    tls_client_certificate "/etc/ssl/certs/internal-client-ca.pem"
}

// Replace "admin.example.com" with your domain name.
admin.example.com {
    tls "/etc/ssl/certs/admin.example.com.crt" "/etc/ssl/private/admin.example.com.key"
    proxy "http://127.0.0.1:9000/"
}

You can also use the system trust store:

globals {
    tls_client_certificate #true
}

Scope planning for admin/internal endpoints

tls_client_certificate is a global-only directive. If you need mTLS only for internal/admin traffic (but not public traffic), run a separate Ferron instance for internal endpoints.

Notes and troubleshooting

  • Ensure the client certificate chain is issued by the CA you configured in tls_client_certificate.
  • Keep private internal CA material protected and rotate client certificates regularly.
  • If requests fail during TLS handshake, verify certificate validity dates and CA chain.
  • For directive details, see Configuration: security & TLS.