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!