Skip to content

Certificate Manager

The Certificate Manager provides WAMP procedures for managing TLS certificates at runtime without restarting Bondy.

Description

Bondy's certificate manager (bondy_cert_manager) centralises all TLS certificate operations:

  • CA trust store -- merges CA certificates from the certifi Mozilla bundle, a user-configured PEM file (cert_manager.cacertfile), and the OS trust store. Used for all outbound TLS connections (OIDC providers, RPC Gateway HTTP backends, etc.).
  • Server certificates -- manages per-listener TLS certificates (cert + key). Enables live certificate rotation via an sni_fun callback so new connections use updated certificates without listener restarts.
  • mTLS -- per-listener client CA pools, verify mode, and fail_if_no_peer_cert settings for mutual TLS authentication.

Live Certificate Rotation

When you rotate a server certificate, the change takes effect immediately for new TLS connections. Existing connections continue using the certificate that was active when the handshake occurred. This allows graceful rotation -- new connections get the new certificate, old connections finish naturally.

The typical workflow for certificate renewal:

  1. An external process (certbot, internal CA, cron job) writes new certificate files to disk.
  2. Call bondy.cert_manager.rotate_listener or bondy.cert_manager.rotate_all to reload them.
  3. New connections immediately use the updated certificates.

Procedures

NameURI
Reload CA certificatesbondy.cert_manager.reload_cacerts
Rotate listener certificatebondy.cert_manager.rotate_listener
Rotate all certificatesbondy.cert_manager.rotate_all
Get server certificate infobondy.cert_manager.get_server_cert_info
Set client authbondy.cert_manager.set_client_auth
Get client authbondy.cert_manager.get_client_auth

Reload CA certificates

bondy.cert_manager.reload_cacerts() -> result()

Re-reads CA certificates from all configured sources (certifi bundle, user PEM file, OS trust store), deduplicates them, and updates the in-memory trust store. New outbound TLS connections will use the updated CA certificates.

Call

Positional Args

None.

Keyword Args

None.

Result

Positional Results

None.

Keyword Results

None.


Rotate listener certificate

bondy.cert_manager.rotate_listener(listener) -> result()

Re-reads the certificate and key files from disk for the specified listener and updates the in-memory certificate store. New TLS handshakes on that listener will use the updated certificate.

Also calls ranch:set_transport_options/2 to update the static certificate for clients that do not send SNI (Server Name Indication).

Call

Positional Args
0stringREQUIRED

The listener reference. One of: api_gateway_https, admin_api_https, wamp_tls, bridge_relay_tls.

Keyword Args

None.

Result

Positional Results

None.

Keyword Results

None.

Errors

  • wamp.error.invalid_argument -- the listener reference is not a known TLS listener.

Rotate all certificates

bondy.cert_manager.rotate_all() -> result()

Re-reads certificate files from disk for all known TLS listeners (api_gateway_https, admin_api_https, wamp_tls, bridge_relay_tls) and updates the in-memory certificate store.

Listeners that do not have certificates configured are silently skipped.

Call

Positional Args

None.

Keyword Args

None.

Result

Positional Results

None.

Keyword Results

None.


Get server certificate info

bondy.cert_manager.get_server_cert_info(listener) -> result(cert_info)

Returns metadata about the currently loaded server certificate for a listener. The private key is never exposed.

Call

Positional Args
0stringREQUIRED

The listener reference. One of: api_gateway_https, admin_api_https, wamp_tls, bridge_relay_tls.

Keyword Args

None.

Result

Positional Results
0objectREQUIRED

Certificate metadata.

Keyword Results

None.

Errors

  • wamp.error.no_such_resource -- no certificate is loaded for the given listener.

Set client auth

bondy.cert_manager.set_client_auth(listener, options) -> result()

Sets the client certificate verification configuration for a listener. This enables or disables mutual TLS (mTLS) at runtime.

Updates take effect for new connections. Existing connections are not affected.

Call

Positional Args
0stringREQUIRED

The listener reference. One of: api_gateway_https, admin_api_https, wamp_tls, bridge_relay_tls.

1objectREQUIRED

The mTLS configuration options.

Keyword Args

None.

Result

Positional Results

None.

Keyword Results

None.


Get client auth

bondy.cert_manager.get_client_auth(listener) -> result(mtls_config)

Returns the current mTLS configuration for a listener.

Call

Positional Args
0stringREQUIRED

The listener reference. One of: api_gateway_https, admin_api_https, wamp_tls, bridge_relay_tls.

Keyword Args

None.

Result

Positional Results
0objectREQUIRED

The current mTLS configuration for the listener.

Keyword Results

None.

Errors

  • wamp.error.no_such_resource -- no mTLS configuration exists for the given listener.

Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution-ShareAlike (CC-BY-SA) 4.0 International license.
Bondy and Leapsight are registered trademarks of Leapsight Technologies Ltd.