Why TLS on Kafka listeners is a planning decision, not a single setting
In a self-hosted KRaft cluster that has never been secured, client and inter-broker traffic usually moves over plaintext listeners. Kafka treats security as optional, so a cluster can run with no encryption at all, or mix secured and unsecured listeners side by side. TLS is the control that encrypts traffic between clients, brokers and tools, and the Kafka security overview is the reference for how the protocol options fit together. Enabling TLS is therefore a change to every listener, not one switch. Each listener needs a name, a port, a security protocol, and an entry in the listener security protocol map, and every client and broker that talks to it must be reconfigured to match.
Teams should settle TLS before they turn on SASL, ACLs or mutual TLS, because each of those depends on a working secured channel. SASL mechanisms such as SCRAM or GSSAPI send credentials over the wire, and a SASL_PLAINTEXT listener exposes them to anyone who can read the network. Client certificate authentication also rides on the TLS handshake, so its trust chain has to exist first. Plan the certificate authority, the keystore and truststore layout for brokers and clients, the hostnames each certificate must cover, and the rotation process before any listener changes. The planning output should name which listeners stay plaintext during migration, how long they remain open, and who approves closing them. Confirm the exact TLS protocol versions and cipher settings your Kafka release supports in its documentation, not in older guides.
What TLS covers in a Kafka cluster
A Kafka cluster has several distinct traffic paths, and each needs its own listener, certificate and trust decision. TLS protects the bytes on each path from eavesdropping and tampering, but it does not decide who is allowed to do what. Work through these paths one at a time before you change any listener.
Client to broker traffic
Producers, consumers and admin clients connect to broker listeners that you define with the listeners and advertised.listeners settings. Each client-facing listener should map to a security protocol such as SSL or SASL_SSL in listener.security.protocol.map. TLS protects the payloads and credentials in transit, but a valid certificate does not prove the client is authorized to read or write any topic. Confirm which listeners are plaintext and which clients still use them.
Broker to broker traffic
Brokers replicate partitions to each other over the inter-broker listener, which you select with inter.broker.listener.name. If this listener stays plaintext, replicated data and any inter-broker credentials cross the network unprotected even when every client listener is encrypted. Brokers also need their own keystore and must trust each other's certificates. Check that hostname verification is set on this path so a broker cannot impersonate a peer.
Controller traffic in KRaft
In KRaft mode, controllers form the quorum that stores cluster metadata, and controller listeners are configured separately with controller.listener.names. Controller traffic is not the same as client or broker data traffic, so encrypting the client listeners does not cover it. Confirm the 4.3 security documentation for the controller listener and protocol settings you plan to use, and verify that controller ports are reachable only from other controllers and the brokers that need them.
Admin tools and Connect workers
Command-line tools such as kafka-topics.sh and kafka-configs.sh, along with Kafka Connect workers, open their own connections using client properties files. Each tool must be pointed at a TLS listener with the right truststore, and Connect workers need the same settings for their producer and consumer internals. A tool left on a plaintext default can expose administrative commands even when the brokers are fully encrypted. Test each tool against the secured listener before closing the old port.
External and exposed listeners
An external listener, often reached through a load balancer, NAT or Kubernetes service, is where clients outside the internal network connect. Its advertised address must match the certificate's subject alternative names, or hostname verification fails for clients. Expose only the listeners that need external reach, and treat each one as an entry point that needs its own authentication and ACL design. TLS on this path does not restrict which network sources can connect.
Which TLS layout fits your network and trust model
When every producer, consumer and broker runs inside one network and one administrative domain, a single internal certificate authority is usually enough. The CA signs one certificate per broker, and the same trust store can be distributed to brokers, clients and tools. Plaintext listeners can be retired once every client supports TLS, and the inter-broker listener should be encrypted even when the network looks private.
- CA placement: Keep the signing CA in your internal PKI, with its private key outside the Kafka hosts.
- Hostname checks: Keep endpoint identification enabled so clients verify that each broker certificate matches the address they dialed.
- Inter-broker traffic: Use a dedicated internal listener with
security.inter.broker.protocolset to an SSL or SASL_SSL value so replication is encrypted. - Protocol versions: Restrict
ssl.enabled.protocolsto modern TLS versions that your Java runtime supports. - Separate chain: Usually unnecessary here, since one chain covers every listener.
Check that every broker certificate has subject alternative names for the exact names clients use, and confirm the plan with your security team and your Kafka distribution documentation.
Clients reached through a load balancer, a NAT address or an ingress in Kubernetes see broker addresses that differ from the ones in the certificates. The advertised listener must match a name that is present in the broker certificate, or clients will fail hostname verification. This is the usual point where a separate external listener earns its own certificate chain.
- Advertised names: Give each external listener a stable DNS name and list it in the certificate subject alternative names.
- Separate listener: Add an external listener on its own port when internal and external clients need different authentication, or when the external CA is managed by another team.
- Separate chain: Issue external certificates from a different CA when a partner, vendor or public-facing team must trust them without trusting the internal CA.
- Kubernetes: Generate certificates from the operator or cert-manager pipeline you use, and rotate them through the same automation.
- Client trust: Ship only the external CA to external clients, so they cannot impersonate internal brokers.
Test each advertised address from outside the cluster before go-live, and confirm the operator and load balancer behavior with their own documentation.
Multi-site layouts cross trust boundaries when replication, mirroring or shared clients span data centers, clouds or organizations. Each site may run its own internal CA, and cross-site links then need a deliberate trust decision rather than a shared root by default. Replication tools also open their own connections, so their trust stores and certificates need the same review as application clients.
- Trust decision: Decide whether sites share a root CA, trust each other's intermediates, or exchange only specific certificates.
- Replication links: Configure TLS for MirrorMaker 2 or other cross-cluster tools with their own truststore and hostname settings.
- Scope of trust: Limit each truststore to the CAs the site actually needs, so a compromise at one site does not extend everywhere.
- Revocation and rotation: Plan how a site's CA is rotated or retired, since every peer must update its trust store.
- Data classification: Confirm which sites may carry which data before deciding how much trust to extend.
Review the geo-replication documentation for your Kafka version and map each cross-site connection to a named owner and certificate.
Configuration options for keystores, truststores and listeners
This table compares the broker settings that define listeners, keystores, truststores, client authentication and TLS protocol choices. Read each row as a decision: the key names the setting, and the right column shows which choices change how you operate the cluster later. Settings that look equivalent often differ in what they actually enforce.
| Config key | What it controls | When it fits and what changes operationally |
|---|---|---|
listener.security.protocol.map | Maps each listener name to a protocol such as SSL or SASL_SSL | Use it to give each listener its own protocol. Mixed plaintext and TLS listeners are possible, so plan a removal step for plaintext ports before go-live. |
listeners and advertised.listeners | Bind addresses on the broker, and the addresses clients are told to connect to | Advertised names must match the certificate SANs. A wrong advertised host causes handshake failures that look like certificate problems. |
inter.broker.listener.name | Names the listener brokers use to talk to each other | Set it to a TLS listener before enabling inter-broker encryption. Changing it requires a rolling restart, so confirm the sequence with the 4.3 upgrade notes. |
ssl.keystore.location and ssl.keystore.type | The file holding the broker's own certificate and private key | Rotation replaces this file, so decide early how keys are delivered and reloaded. Confirm the supported store types in the 4.3 documentation. |
ssl.truststore.location | The CA certificates the broker trusts when it verifies a peer | Scope the truststore to your internal CA. A broad truststore lets any certificate chained to those roots connect, so review it when you add trust anchors. |
ssl.client.auth | Whether clients must present a certificate: none, requested or required | Requested mode accepts clients that send no certificate, which gives false comfort. Use required when certificates are meant to identify clients. |
ssl.endpoint.identification.algorithm | Whether the client checks that the certificate matches the host it dialed | Leave hostname verification on in production. Disabling it hides misconfigured SANs and opens the door to impersonation on the network path. |
ssl.enabled.protocols and ssl.protocol | The TLS versions offered and the default protocol context | Restrict versions to those your security policy allows and confirm the supported set for your Java 17 runtime. Older clients may fail to negotiate, so test them first. |
How to set up TLS on Kafka listeners in order
This sequence turns plaintext Kafka listeners into TLS-protected listeners on a KRaft cluster without taking the whole cluster down. Each step ends with a check you can run before moving to the next one.
Confirm the release and Java runtime
Confirm the Kafka version you run and the Java runtime on every broker and tool host before touching configuration. The downloads page lists 4.3.1, 4.2.2 and 4.1.2 as the supported releases, and Kafka 4.0 and later require Java 17 for brokers and tools. Run the broker start script's version output and
java -versionon each host. Done means every broker reports a supported release and a Java 17 or later runtime, and the cluster is in KRaft mode with no ZooKeeper dependency.Issue a CA and broker certificates with correct SANs
Create or designate an internal certificate authority, then issue one server certificate per broker. Put every name clients and brokers will use into the subject alternative names, including DNS names and IP addresses that appear in
advertised.listeners. Ask your security team to confirm the CA key is held under their control and that certificate lifetimes and renewal owners are recorded. Check each certificate withopenssl x509 -in broker1.crt -noout -textand confirm the SAN list contains every advertised hostname for that broker.Build keystores and truststores
Package each broker's private key and signed certificate, plus the CA chain, into a keystore, and import the CA certificate into a truststore that brokers and clients will trust. Store the passwords in your secrets system, not in a shared properties file. Use
keytool -list -vagainst each keystore and truststore to confirm the alias, the expiry date and the issuer. Done means each broker has a keystore with its own key and a truststore containing the CA, and no store holds a private key that another broker needs.Define the listener protocol map
Add a secured listener, typically using SSL or SASL_SSL, to
listenersandadvertised.listeners, and map each listener name to its security protocol inlistener.security.protocol.map. Keep the existing plaintext listener running during migration so current clients keep working. Setssl.keystore.location,ssl.keystore.password,ssl.truststore.locationandssl.truststore.passwordfor the broker, and pinssl.enabled.protocolsto TLS 1.2 and 1.3 if your policy requires it. Check the effective config with the broker's startup log, which prints the listener configuration when it starts.Configure the inter-broker listener
Set
inter.broker.listener.nameto the secured listener so broker-to-broker replication uses TLS. Brokers must be able to reach each other on that listener using the advertised names in the certificates. Decide whether to require client certificates withssl.client.authat this stage or leave it atnoneuntil clients are moved. Verify withkafka-broker-api-versions.sh --bootstrap-serveragainst the new listener from another broker host, and confirm the call completes without a handshake error.Roll the change onto one broker first
Restart a single broker with the new configuration and leave the rest of the cluster on the old settings. The first restart is the test that catches keystore paths, password errors and SAN mismatches before they reach the whole cluster. Wait until the restarted broker rejoins the cluster and its partitions show as in sync again. Confirm with
kafka-metadata-quorum.shandkafka-topics.sh --describethat under-replicated partition counts return to their previous level before continuing.Roll the change across the remaining brokers
After the first broker is healthy, restart the remaining brokers one at a time, waiting for each to rejoin and for replication to catch up before the next restart. Keep the plaintext listener open until every client has moved to the secured listener. Check that no partitions remain under-replicated and that the controller quorum is stable after each restart. Only remove the plaintext listener in a later change, after client verification is complete.
Verify with a TLS client and check handshake logs
Connect a test client to the secured listener with a truststore that holds only your CA, and confirm a produce and consume round trip succeeds. Use
openssl s_client -connect broker1:9093 -CAfile ca.pemto confirm the presented certificate chain and the negotiated protocol version. Search broker logs forSSL handshake failedor certificate errors across a full business cycle, and confirm the failure rate is zero for expected clients. Record the test output as the evidence for the change.
Hostname verification and TLS protocol choices
Hostname verification is what stops a client from trusting the wrong broker. A certificate chain that validates against your truststore proves only that the certificate was issued by a trusted authority. Without hostname verification, a client will accept any broker presenting a certificate signed by that authority, including one reached through a misdirected DNS record or a spoofed address. Each broker certificate needs subject alternative names that match the exact host names clients resolve, and the client's ssl.endpoint.identification.algorithm setting should be https so that verification is enforced rather than left at its default. Verify this on every listener, including the inter-broker listener, since brokers connect to one another using the addresses they advertise.
The name a client dials and the name a broker advertises must agree. Each entry in advertised.listeners is the address the broker returns to clients in metadata responses, so a listener advertised as broker1.example.internal needs that name in its certificate's SAN list. Mismatches are the most common cause of handshake failures after a TLS rollout, particularly with load balancers, NAT, or Kubernetes services where internal and external names differ. Build one listener per network path, issue certificates that cover every name each path uses, and test from a client on each network before cutting over. Your DNS and certificate inventory should be reviewed together, because a renewed certificate with a changed name will break clients that were working.
Choose the enabled protocols and cipher suites with your security team, then confirm what your runtime actually supports. The settings ssl.enabled.protocols and ssl.protocol control which TLS versions brokers and clients negotiate, and the supported values depend on the Java runtime in use. Brokers require Java 17 from Kafka 4.0 onward, so check the JVM version on every broker host and confirm the TLS versions it offers against the Kafka 4.3 security overview before you set a policy. Record the agreed protocol list and cipher policy in configuration management, and confirm with each client team that their Java version can negotiate the same versions, since older client runtimes are a frequent source of unexpected failures.
How certificate rotation works without downtime
Should I add a new CA to the truststores before rotating certificates?
Yes. Add the new CA certificate to every truststore while the old CA stays trusted, so brokers and clients accept certificates signed by either authority. Only then issue new keystores signed by the new CA. This overlap lets you change one broker, listener or client at a time without a window where connections fail. Import the CA with keytool -importcert into each truststore, and use the same alias scheme on every broker so later audits are simpler. Remove the old CA only after every certificate it signed has been replaced and checked. Whether a truststore change on a running broker takes effect without a restart depends on the version and config key, so confirm that for Kafka 4.3 in the security documentation and test it in a non-production cluster first.
Does Kafka reload keystores at runtime or does it need rolling restarts?
Broker listener keystores and truststores can be changed on a running broker through dynamic configuration, but whether a given key is updatable for your listener and version is a confirmation item for Kafka 4.3. Check the documented list of reconfigurable broker configs against your listener name before you plan a no-restart procedure. Client applications are different: a client usually loads its keystore and truststore when it creates a connection, so a client certificate change typically means restarting or recreating the client process, or using a client library that supports reloading. Where dynamic reload is not confirmed for your setup, use a rolling restart, one broker at a time, after confirming the cluster has enough replicas to stay available during each restart. Verify each step with a test connection before moving on. The Kafka security overview is the starting point for confirming these details.
How do I overlap old and new certificates during rotation?
Issue the new certificate before the old one expires, with the same subject alternative names and key usage, and deploy it while the old certificate is still valid. Because the truststores already trust the new CA, brokers and clients accept either certificate during the window. The overlap must be long enough to cover every broker restart, every client deployment and any batch job that connects only occasionally. Start the new certificate well ahead of expiry, and set the length of the window from your change calendar and your slowest client release cycle. Record the old and new serial numbers and validity dates in your change log. Once monitoring shows that no connection presents the old certificate, retire it and keep its private key protected until retirement is complete.
How do I rotate inter-broker certificates in a rolling sequence?
Inter-broker traffic has its own listener and trust settings, so rotate it in an order that keeps every broker able to reach every other broker. A practical sequence is:
- Add the new CA to the truststore on every broker, and confirm the change is in place on each one.
- Deploy a keystore with the new certificate to one broker, restart or reconfigure it, and check that it rejoins the cluster and replicates.
- Repeat for each remaining broker, one at a time, watching under-replicated partitions between steps.
- Remove the old CA from truststores in a later change, after all brokers present new certificates.
Confirm the inter-broker listener name and security protocol for your version before you start. In KRaft mode, confirm whether controller listeners need the same treatment and include them in the plan. Rehearse the full sequence in a staging cluster that matches your listener layout.
How do I check certificate expiry before it causes an outage?
Check expiry from the files on disk and from the live listener, and run the same checks in scheduled monitoring jobs. For a PEM certificate, run openssl x509 -enddate -noout -in broker.crt. For a keystore, run keytool -list -v -keystore kafka.server.keystore.jks and read the validity fields. To confirm what a running listener presents, run openssl s_client -connect broker1.kafka.internal:9093 -servername broker1.kafka.internal and read the certificate dates. The host names are illustrative. Set alerts at several thresholds so there is time to complete the rotation sequence. Include client truststores and CA certificates in the checks, because an expiring CA breaks every certificate it signed. Keep an inventory that lists each listener and its owner.
What breaks most often during Kafka certificate rotation?
The most frequent failures are hostname verification errors, a missing intermediate certificate, a truststore updated on some brokers but not all, and a client that still holds only the old CA. Subject alternative names must match the names clients actually use, including internal DNS aliases, because hostname verification happens on the client side. Keystore formats and passwords also cause trouble when a new file is built with different tooling than the original. Test each listener with a real client connection after every step, not only with a port check, and keep a rollback copy of the previous keystore and truststore. Confirm the enabled TLS protocols and cipher settings for your version as well, since a change in those settings can cause handshake failures that look like certificate problems.
Can DeployOpen plan and run certificate rotation for my Kafka cluster?
Yes. DeployOpen can plan and carry out certificate rotation for Kafka listeners in your infrastructure as part of a fixed-scope engagement, with scope, deliverables and timeline agreed in writing before work starts. A typical scope covers an inventory of listeners and client applications, review of the certificate process you already use, a rotation runbook, a rehearsal in a non-production cluster and support for the production change window. For recurring work, such as scheduled rotations or ongoing expiry monitoring, DeployOpen offers retainers. Your own team can run the procedure once it is written and rehearsed. Ask that the written scope name the brokers, listeners and client applications it covers.
What drives the cost of rotating Kafka certificates?
The cost depends on how many brokers, listeners and client applications need new certificates, how many CAs are involved, and how much of the procedure is already automated. Costs split into one-time work, such as the inventory, runbook, rehearsal and first rotation, and recurring work, such as scheduled rotations, expiry monitoring and client updates. Your internal costs are engineer time in change windows plus any certificate management tooling you license. A quote should itemize the listener and client count, the environments to rehearse in, whether automation is included, and how a rollback would be handled. Ask whether the quote covers changes inside client applications, since those can sit outside the platform team and add effort on the application side.
Security and operational risks to control
TLS on Kafka listeners fails in a few predictable places: after cutover, in key handling, at certificate expiry, in protocol choices, in hostname matching and in silent handshake errors. Each risk below pairs with one control you can build into the rollout and check before go-live.
Plaintext listeners left open
After clients move to the TLS listener, the original PLAINTEXT listener often stays bound and reachable. Any client that still connects there sends data and credentials unencrypted, and the gap is easy to miss because the cluster keeps working. Remove the plaintext listener from listeners and listener.security.protocol.map once every client and inter-broker path is confirmed, then test from each network segment that the old port refuses connections.
Private keys with broad file permissions
Keystore files hold private keys, and a keystore readable by every service account on a broker host exposes the whole cluster identity. Restrict keystore and truststore files to the Kafka service user, keep passwords out of shared scripts and process listings, and confirm that backups and configuration management repositories do not hold unencrypted copies. Ask who can read the key material on each broker and whether that list matches your access model.
Expired certificates causing outages
A broker or client certificate that expires stops handshakes at once, and a cluster-wide expiry can take down producers, consumers and replication together. Record the validity period of every broker and client certificate in an inventory, alert well before expiry, and rehearse rotation on a non-production cluster. Confirm the rotation procedure for each certificate type before the first renewal falls due.
Weak protocol and cipher settings
Left at defaults or copied from older examples, TLS settings can allow outdated protocol versions or weak cipher suites. Set ssl.enabled.protocols and ssl.protocol explicitly to the versions your policy allows, and review the cipher list with your security team. Check the effective values on each broker after a restart, because a configuration file can be correct while an override elsewhere changes the result.
Certificate names not matching advertised hosts
Clients verify that the broker certificate names the host they connected to, so a certificate issued for one name fails when advertised.listeners points to another. Put every advertised host name and IP address in the subject alternative names, and keep hostname verification enabled rather than disabling it to get a connection working. Test each advertised address from clients on every network path, including any load balancer or NAT in front of the brokers.
No monitoring for handshake failures
TLS handshake failures can appear only as client connection errors, so a broken certificate may go unnoticed until an application team reports lost traffic. Send broker logs to your central logging platform, alert on repeated SSL handshake and certificate errors, and track the broker and client metrics your monitoring already collects for connection failures. Ask your operations team which alert owns each failure type and how fast it must be acknowledged.
What enabling TLS on Kafka costs and what it takes
What makes enabling TLS on Kafka cost more or less?
The biggest drivers are how many clients connect, how many languages and client libraries they use, how mature your certificate authority process is, and whether the cluster spans several sites. Each client application needs a truststore update, a protocol setting and a restart or redeploy, so a cluster with a few well-documented services is far cheaper to move than one with dozens of unmanaged internal tools. Multi-site layouts add certificate chains, hostname planning and more change windows. Ask any quote to list the client inventory, the languages involved and the sites, because those three inputs explain most of the difference between two estimates.
Can our own team enable TLS on Kafka without a partner?
Yes, many teams do it in-house, provided they have someone who can run Kafka brokers, someone who owns the certificate authority, and someone who knows every client that connects. The Kafka security documentation covers listeners, keystores and truststores, so the technical steps are well documented. The risk is usually not the configuration itself but the coordination: a missed client keeps failing after the broker change, and a broker restart without a tested rollback can stall replication. A partner is useful when the team lacks capacity, has no PKI experience, or needs a written plan and runbook before the change window is booked. DeployOpen plans and implements this work under a written, fixed scope inside your own infrastructure.
What does the TLS project need from our team?
It needs three things in practice. First, a PKI owner who decides the certificate authority, issues broker and client certificates, sets validity periods and controls the private keys. Second, network access that lets clients reach the new secured listener ports, and lets brokers reach each other on the inter-broker listener, through firewalls and load balancers. Third, change windows for rolling restarts, with enough notice for application teams to redeploy their clients. Your team also supplies an inventory of applications, connector workers and monitoring tools that connect to Kafka, and a named owner for each. Confirm these responsibilities in the statement of work so that no one assumes another team will update a truststore.
How long does enabling TLS on a Kafka cluster take?
Duration depends on cluster size, the number of broker nodes that need rolling restarts, and how many clients must be moved to the secured listener. A small cluster with a short client list and a working PKI can move quickly, while a large cluster with many teams, external partners and unclear ownership takes longer because each client change needs testing and scheduling. Pilot runs in a non-production environment usually determine the real timeline. We do not publish durations, so ask for a timeline built from your broker count, client inventory and change calendar in the written scope.
When should we pair TLS with SASL or mutual TLS?
TLS encrypts traffic and lets clients verify the broker, but it does not by itself prove who the client is. Add SASL when you need username or password style authentication, such as SCRAM-SHA-256 or SCRAM-SHA-512 credentials, Kerberos through GSSAPI for Active Directory or FreeIPA environments, or OAUTHBEARER for token-based identity. Add mutual TLS when clients can hold their own certificates and you want the certificate identity to drive access control. Kafka's authorization layer needs a principal to apply ACLs, so most production clusters combine encryption with one authentication method. Decide this before enabling listeners, because the principal naming shapes your ACL design later.
What should we ask for in a TLS implementation quote?
Ask for a written scope listing each broker listener, the security protocol for each one, the inter-broker configuration, and the list of clients covered. Request a description of the certificate chain, who issues it, and how private keys are stored and rotated. Confirm the verification and testing steps, the rollback plan for each restart, and whether plaintext listeners will be closed at the end. Check who performs client changes, who signs off, and what documentation you receive, such as configuration files, a runbook and a record of tested connections. Finally, confirm which items are one-time work and which need ongoing support, such as certificate renewal and upgrades to Kafka releases listed on the Kafka downloads page.
Does TLS add recurring work after the initial setup?
Yes. Certificates expire, so someone must renew them and rotate them into brokers and clients before expiry, and this needs a tested procedure that avoids downtime. Certificate authority policy, key storage and revocation handling also recur. Each Kafka upgrade or new client library may change accepted TLS protocols or truststore handling, so the configuration must be checked again. Budget for the monitoring of certificate expiry dates and for periodic reviews of enabled protocols. These costs are small compared with the initial client migration, but they are easy to forget and cause outages when they are missed.
How DeployOpen scopes and delivers TLS work
DeployOpen plans and implements TLS on Kafka listeners inside your own infrastructure, whether that is your cloud accounts, data centers or an air-gapped network. The engagement starts with a written scope that lists the listeners to encrypt, the client populations that must move (applications, Connect workers, Streams jobs, admin tools and any Schema Registry or UI endpoints), the certificate authority that will sign broker and client certificates, and the rotation process you expect to run afterward. Most engagements are fixed-scope, so deliverables such as the keystore and truststore layout, the listener.security.protocol.map design, the ssl.enabled.protocols decision and the rollout runbook are agreed in writing before work begins.
Delivery covers the parts that usually cause outages: validating certificate chains and Subject Alternative Names against every advertised listener, confirming hostname verification on each client path, staging the rolling restart order, and proving that plaintext listeners are closed once clients have moved. DeployOpen also prepares the evidence a compliance assessment may ask for, such as configuration baselines, certificate inventories and change records. DeployOpen does not issue audit reports, attestations or certifications; independent auditors and certification bodies do that work. Ongoing certificate rotation, Kafka version upgrades and periodic TLS configuration reviews can be covered under a retainer, and you should confirm the exact service levels in that agreement before signing.

