Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mutual Transport Layer Security ​(mTLS)​

Protocolo de Segurança para comunicação segura entre duas partes sobre a internet​.

Apresentação

O que é mTLS?

  • O TLS mútuo, ou mTLS, é um método para autenticação mútua. ​
  • Ele assegura que as partes em cada extremidade de uma conexão de rede são quem afirmam ser, verificando que ambas têm a chave privada correta. ​
  • As informações dentro de seus respectivos certificados TLS fornecem a verificação adicional.​

O que é TLS?

  • Transport Layer Security (TLS) é um protocolo de criptografia muito usado na internet. ​
  • O TLS, antes era chamado SSL. ​
  • Ele autentica o servidor em uma conexão cliente-servidor e criptografa as comunicações entre cliente e servidor para que as partes externas não possam espionar as comunicações.​

Para que serve TLS?

Figura http vs https

Como funciona o TLS?

Normalmente em TLS, o servidor tem um certificado TLS e um par de chaves pública/privada, mas o cliente não tem.
O processo típico do TLS funciona assim:​

Figura funcionamento TLS

Como funciona o mTLS?

No mTLS, tanto o cliente quanto o servidor têm um certificado e ambos os lados autenticam usando seu par de chaves pública/privada.
O processo típico do mTLS funciona assim:​

Figura funcionamento mTLS

Hands on

Rodando a aplicação

Requisitos:

  • NodeJS
  • Yarn

Rodando:

  • Servidor A: /server $ yarn deva
  • Servidor B: /server $ yarn devb

Requisições para Server A

Requisição http:

curl http://localhost:3000/ping

Requisição https:

curl --insecure https://localhost:3442/ping

Requisição mTLS:

curl --insecure \
  --cacert ./ca/ca.crt \
  --key ./client/client.key \
  --cert ./client/client.crt \
  https://localhost:3443/ping

Requisições para Server B

Requisição http:

curl http://localhost:3001/ping

Requisição https:

curl --insecure https://localhost:3444/ping

Requisição mTLS:

curl --insecure \
  --cacert ./ca/ca.crt \
  --key ./client/client.key \
  --cert ./client/client.crt \
  https://localhost:3445/ping

Criação dos certificados

Criação do certificado para o servidor

  1. Criando a chave
openssl genrsa -out server.key 2048
  1. Criando o certificado
openssl req \
  -new \
  -key server.key \
  -subj '/CN=localhost' \
  -out server.csr
openssl x509 \
  -req \
  -in server.csr \
  -days 365 \
  -signkey server.key \
  -out server.crt
  1. Inspecionando o certificado
openssl x509 --in server.crt -text --noout

Criação do certificado da CA (root)

  1. Criando o certificado root
openssl req \
  -new \
  -x509 \
  -nodes \
  -days 365 \
  -subj '/CN=root-ca' \
  -keyout ca.key \
  -out ca.crt
  1. Inspecionando o certificado root
openssl x509 --in ca.crt -text --noout
  1. Criando o certificado do servidor assinado com a CA
openssl x509 \
  -req \
  -in server.csr \
  -CA ca.crt \
  -CAkey ca.key \
  -CAcreateserial \
  -days 365 \
  -out server-signed.crt
  1. Inspecionando o certificado assinado
openssl x509 --in server-signed.crt -text --noout

Fontes

About

Aplicação exemplo para mTLS em NodeJS com TypeScript, Express, DotEnv e Axios

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages