# Rust Kafka Publisher and Subscriber Demo with Strimzi Kafka and Client mTLS for encryption in transit Simple producer/consumer messaging example that works with a Kafka cluster that enforces client mTLS authentication. ## Optional - Custom TLS Assets By default the ``./kubernetes/deploy.sh`` script will use the included tls assets in the repo: [./kubernetes/tls](https://github.com/jay-johnson/rust-with-strimzi-kafka-and-tls/tree/main/kubernetes/tls). Before going into production with these, please change these to your own to prevent security issues. If you want to use your own tls assets you can set these environment variables: - ``CA_FILE`` - path to your Certificate Authority (CA) file - ``CA_KEY_FILE`` - path to your CA key file - ``TLS_CHAIN_FILE`` - path to your tls server chain file (ordered by: cert then CA) - ``TLS_KEY_FILE`` - path to your tls server key file ```bash ./kubernetes/deploy.sh ``` ## Verify Client mTLS Clients must provide the tls key, cert and CAfile for establishing a valid mutual tls connection. For local testing you will need to add these entries to your ``/etc/hosts`` or set up a real nameserver for dns: - ``cluster-0-broker-0.redten.io`` - ``cluster-0-broker-1.redten.io`` - ``cluster-0-broker-2.redten.io`` As an example on the local loopback device: ```bash # /etc/hosts 127.0.0.1 cluster-0-broker-0.redten.io cluster-0-broker-1.redten.io cluster-0-broker-2.redten.io ``` For users on minikube you can use ``minikube ip -p CLUSTERNAME`` to get the ip address: ```bash # /etc/hosts 192.168.49.2 cluster-0-broker-0.redten.io cluster-0-broker-1.redten.io cluster-0-broker-2.redten.io ``` ```bash echo "ssl test" | openssl s_client -connect \ cluster-0-broker-0.redten.io:32151 \ -key ./kubernetes/tls/client-key.pem \ -cert ./kubernetes/tls/client.pem \ -CAfile ./kubernetes/tls/ca.pem \ -verify_return_error \ && echo "strimzi kafka cluster is working with self-signed tls assets!" ``` ## Create Kafka Topic for Rust Messaging ```bash cat <