Tenho feito muitos testes para utilizar TLS e mTLS. TLS é uma camada de criptografia assimétrica para garantir a comunicação segura entre dois pontos.
Em geral temos o model parecido com os sites web onde o servidor tem uma conexão segura assinada por uma autoridade certificadora e nos conectamos a ele. No caso de mTLS, mutual TLS, é preciso validar quem conecta também.
Pra gerar os testes que venho fazendo, gero um certificado de 1 dia usando openssl da seguinte forma:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 1 -nodes \
-subj "/C=SE/ST=Stockholm/L=STHLM/O=Company/OU=ADP/CN=localhost
Esse comando gera para mim a chave do servidor (key.pem) e a chave da autoridade certificadora, que assina a chave.
Em geral carrego isso no meu programa que utiliza TLS.
Pra testar (assumindo que seu serviço seja http e esteja usando a porta 9091):
curl --cacert cert.pem --key key.pem --cert cert.pem "https://localhost:9091/
Eu poderia gerar um chave pro client, que no caso é o comando curl, mas como é pra ambiente de testes, re-uso o mesmo.
Boa diversão!