confium-tls-signer

The TLS signer is a library (not a binary) that provides a TLS 1.3 signature callback hook. Modern TLS libraries (OpenSSL, BoringSSL, rustls) support asynchronous signature callbacks; the Confium TLS signer plugs in and routes each handshake signature through a threshold session.

When to deploy

  • You operate a high-value TLS-terminating service (banking, identity provider, government).
  • A single signing key on the terminator is a structural risk.
  • You want signing authority split across multiple parties or regions.
  • You can tolerate ~150ms handshake overhead (typical for a cross-region threshold session).

Install (Rust library)

[dependencies]
confium-tls-signer = "0.3"
rustls = "0.23"   # or your TLS library of choice

Architecture

[ TLS handshake ] ─── needs signature ─── [ TLS library ]

                                              │ asks the configured
                                              │ signer to produce a sig

                                       [ Confium TLS signer ]

                                              │ dispatches to coordinator

                                       [ Threshold session ]
                                       (T-of-N signers)


                                       [ Standard signature ]
                                       (verifier doesn't notice)

Usage with rustls

use rustls::sign::SigningKey;
use confium_tls_signer::ThresholdSigningKey;

let signing_key = ThresholdSigningKey::new(
    coordinator: "tcp://coordinator.internal:7443",
    public_key: my_cert_public_key,
    algorithm: "ECDSA-P256",
)?;

// Hand this to rustls as the server's signing key.
let server_config = ServerConfig::builder()
    .with_no_client_auth()
    .with_certifier(cert_chain, vec![signing_key]);

Usage with OpenSSL 3.0

OpenSSL 3.0’s provider API supports signing callbacks. Use the confium-openssl-provider and configure it for the TLS handshake algorithm:

[algorithms]
ECDSA-P256 = "confium"   # Routes TLS handshake sigs through Confium

See the OpenSSL provider docs for details.

Latency considerations

A TLS handshake adds ~150ms with a cross-region threshold session. For high-traffic sites:

  • Use a coordinator co-located with the TLS terminator (~30ms).
  • Batch handshakes per session (the threshold session can produce multiple signatures per round).
  • Cache session resumption tickets aggressively — resumption doesn’t require a new signature.

Compatibility

TLS library Status
rustls ✅ full support via SigningKey trait.
OpenSSL 3.0 ✅ via the provider API.
BoringSSL ✅ via the provider API (OpenSSL-compatible).
wolfSSL ⏳ callback API exists; integration in progress.
Java JSSE ✅ via the JCE provider + SunJSSE.

See also