você chegou em uma entrevista de emprego Te perguntaram o que é mútuo ao tls porque isso é tão importante e você ficou sem saber responder e talvez sem o emprego a partir de hoje isso não vai mais ser um problema para você [Música] E aí James beleza eu sou bem Yuri e esse é o guia de epsec E hoje nós vamos aprender como funciona o mutual tls ou seja como garantir mais uma camada digamos de segurança na nossa comunicação entre serviços terceiros primeiro nós vamos entender o conceito para que você saiba o que ou porque o como depois vão entender os riscos que existe nas abordagens tradicionais e no final nós vamos ver na prática em código utilizando como que funciona isso tudo nós vamos criar certificados Auto assinados e assim você não precisa comprar um domínio nada assim e vamos botar tudo isso em localhost assim você pode testar inclusive na sua máquina temos aqui duas empresas a Alice e a empresa de Bob ambas possui serviços que vão interagir entre si tanto Alice vai fazer requisições para as apis da empresa de Bob quanto a empresa de Bob vai fazer requisições para as apis da empresa de Alice e o que é muito comum Alice pode entregar para a empresa de blob uma API que comentar que sempre que bob quiser fazer requisições para suas apis ele pode utilizar aquela pequi o mesmo faz Bob Bob entrega uma API que das suas apis para Alice e todos os equests caras for fazer passa essa api que junto essa estratégia ela é normal no mundo corporativo mas ela funciona extremamente bem quando a gente não conhece os usuários que podem ser Ou eles crescem a medida do tempo por exemplo quero consumir uma pilha de rubi Poxa do nada eu vou gerar um token de acesso a essa api e vou poder consumi-la teu usuários vão aparecendo consumidores dessas apis vão aparecendo e isso funciona extremamente bem já é um pouco diferente quando a gente fala de comunicação entre serviços terceiros digamos assim dentro do mundo corporativo por exemplo se a sua empresa Depende de um serviço de envio de e-mail Depende de um serviço de emissão de boletos de faturas etc se tem um outro serviço que cuida de dados pessoais e sensíveis serviços de pagamento que armazena um cartão de créditos e lidam com transferências bancárias quando nós temos serviços que criam codependência digamos assim no nosso modelo de negócio esse tipo de configuração já deixa de ser a configuração ideal então nós precisamos entender que contratando um novo serviço que vai fazer parte do nosso ecossistema empresarial alguns outros requisitos de segurança precisam ser aplicados falando um pouquinho de riscos uma apiq previne o risco de alguém que souber apenas api fazer uma chamada sem ter um segredo combinado entre as partes né então ou seja previne esse risco de uma chamada pura e reta para uma API porém a gestão de segredos ela é algo complexo o que que poderia acontecer dentro da empresa de Bob ou dentro da empresa de hélice Alguém poderia documentar essa pi aqui no confluence num Google Docs no redmi num repositório poderia estar em vários lugares essa api aqui de consumo da API de hélice e se vaza um código fonte se alguém não autorizado acaba tendo acesso essas documentações acaba tendo um acesso indevido a um balde de senha nem sempre Segredos são muito bem gerenciados dentro das empresas dentro dos times de software em geral né E aí o que acaba acontecendo nós temos o risco do vazamento dessa chave uma vez essa chave estiver vazada podemos ter requisições de qualquer lugar do mundo para as apis de hélice utilizando essa pi aqui que está estaria no caso né em posse de Bob Qual o problema Imagine que hélice tenha um serviço de Finanças aonde pode mover dinheiro entre contas aí Bob diz assim mova o dinheiro de contar para a conta B isso seria terrível se uma chave de api pudesse vazar mas perceba que agora nós estamos falando de um risco de ter uma requisição externa de qualquer lugar utilizando a APK que foi entregue a Bob para consultar o serviço de hélice então nós devemos aplicar uma segunda camada de segurança que seria validar o Range que poderiam consumir este serviço de Alice por exemplo nessa api que foi entregue para Bob só vou acertar requisições dos Ipês A B e C que são os Ipês de saída do ambiente de produção dos serviços de Bob da infraestrutura de Bob então nós temos uma validação de quais servidores quais regiões de IP poderiam de fato consumir os nossos serviços mas com infelizmente nesse mundo gigante segurança ele é uma corrida contra o tempo entre risco mitigação risco migação risco migação aqui também não seria diferente né estamos falando de hélice recebendo requisições de Bob e validando um Range de ipê rentes de p muda né da mesma forma como Bob está enviando uma requisição está chamando uma API de hélice e que por exemplo em um subdomínio um atacante poderia tomar posse desse subdomínio através de uma coisa chamado subdomen tem cover nós não vamos falar nesse vídeo na hora ficou desse vídeo mas que eu quero que você entenda é hoje aquele domínio na qual tanto Bob pode estar chamando quando ele se pode estar chamando de Bob pode amanhã não ser da empresa tá pode ser de uma outra pessoa uma outra empresa ou inclusive principalmente provavelmente de um atacante Então como que tanto Bob quanto ele se poderiam criar um modelo de assinatura criptografia e etc que quando Bob envia uma requisição para hélice hélice saiba e Garanta através de uma assinatura que é Bob olha essa aí que são foi assinada qual que eu procurei para o Bob e a hélice quando for interagir com o Bob Ela também tem assinatura posso enviar não eu conheço a assinatura porque eu que disse para eles para assinar dessa forma ou seja como que ambos podem criar um modelo de assinatura entre eles que as requisições vão ser assinadas e criptografadas com um modelo compartilhado de confiança para isso existe o mutual tls aonde ambos possuem certificados e assinaturas específicas criada para essa comunicação entre eles tanto de hélice para Bob quanto de Bob para hélice e agora nós vamos ver isso Tecnicamente tirando no GS e o psl rodando tudo em local rosto para entender bonitinho como funciona mais ou menos isso Tá Mas antes de tudo vamos fazer um back to the basecs aqui pra gente não se confundir no exemplo tá quando hélice faz uma requisição para o serviços do Bob é é um cliente e Bob é um server quando o Bob faz uma Inquisição para hélice Bob é um Clint e Alice hora de colocar a mão na massa e ver como isso funciona no código Primeiro de tudo nosso cenário vai ser o seguinte hélice vai ser o server ou seja hélice vai ter api vai ser a dona da api e Bob vai ser o klink ele que vai consumir os dados ou fazer equisições para API de hélice como hélice é o server é hélice que tem o domínio e o poder sobre os certificado e significa que hélice vai gerar o certificados hélice envia o certificados de bob porque vão existir certificado específico da hélice e certificado específicos do Bob faz requisição que hélice enviou assim quando fizer uma requisição sair junto essa assinatura com esse certificado que foram gerados pela hélice hélice valida a requisição e aceita ou não ela baseado tanto no conteúdo api whatever etc mas também na assinatura do certificados que essa requisição está sendo feita esse é o nosso cenário é a partir daqui que nós vamos trabalhar vamos criar um best script com todos os comandos que vão gerar e certificados para nós Primeiro de tudo nós vamos gerar o certificados do Servidor para isso nós vamos utilizar Este comando aqui Open SSL rec - RSA e uma quantidade de bikes ou seja por nós estarmos gerando certificado nós precisamos passar no algoritmo RSA uma complexidade uma quantidade de bikes que vai ser compostas essas chaves criptográficas de certifica do nesse caso eu vou criar uma variável de bikes que vai ter 4. 096 ou seja vamos utilizar certificados utilizando chave RSA de 4. 096 bikes perfeito e certificados normalmente possui uma assinatura ou uma capacidade de gerar assinatura essa assinaturas é utilizado um algoritmo de hashi Esse algoriti vai ser o chá 256 beleza menos Notes E aí é o seguinte nós vamos ter para cada certificado uma chave privada e uma chave pública neste comando nós vamos gerar duas Chaves a chave privada do certificado do Servidor server.
ki e um certifiquei request ainda não é o certificado lá o CRT do Servidor tá é um exercício que request depois nós vamos gerar o certificado desse servidor E aí nós estamos colocando uma pequena configuraçãozinha aqui dizendo que esse certificado vai funcionar em local host tá porque relatório consumo executando tudo em local host precisa fazer algumas configuraçõezinhas a mais que normalmente em certificados produtivos Nós não precisamos fazer tá beleza temos aqui o comando que vai gerar o certificado do Servidor lembra que nós vamos gerar uma série de certificados vamos enviar para o Bob's assim óbito se quiser fazer requisições aqui tu vai ter que usar esse certificados aqui show de bola é isso vamos fazer agora vamos já o certificados do Bob que são certificados do Klein o comando é idêntico qual a diferença que agora nós estamos gerando arquivo clint. quie e client. csr tá e não mais serve beleza OK Olha só nós temos certificados dos dois lados né você ficar do lado do cérebro esse cara lá do client existe algo que precisa ser feito aqui que é criar um elo de confiança entre estes certificados este Elo de confiança é gerado por coisa que nós chamamos de certificate ao torrent ou ca quando você está navegando na web tal e acesse um site que tem https você vai lá buscar o certificado desse site específico E aí esse site vai ter assinatura de uma entidade certificadora que é quando você compra um certificado digital por exemplo tem uma empresa que vende ele que é uma infinidade de edificadora né Beleza que que vai acontecer seu browser ele vai lá nessa entidade certificadora e vai olhar assim ó cara eu recebi esse certificado aqui daquele site.
com qualquer ali ele é válido essa entidade retificadora vai dizer sim cara esse esse certificado Tá assinado e ele é válido E aí o seu cadeadinho fica verde lá no nosso caso não é diferente nós vamos precisar de uma entidade certificadora que valide e Garanta esse certificados e também gera um elo de confiança entre eles nós vamos gerar agora o certificado para esse ca para isso nós vamos usar os comandos Open SSL G RSA - Alt e uma chave privada deste C A desta certifiquei Altar muitas vezes quando você já tiver o certificado digital da sua empresa você já vai ter esse ca tá você não precisa gerar nosso laboratório aqui nós estamos gerando todos os certificados profissionais local rosto então por isso estamos gerando o certificado também dessa entidade certificadora tá com a mesma quantidade de bikes dos outros certificados tá bom e depois nós vamos emitir Um certificado dessa autoridade certificadora usando o open SSL rack menos 1000 menos x 509 menos que passando a chave privada dessa entidade certificadora e nós estamos fazendo out Num ponto CRT ou seja para essa entidade certificadora nós vamos ter uma chave privada e Um certificado Contendo a chave pública agora nós vamos fazer dois comandinhos que eles são customiza tá a gente vai precisar fazer eles porque nós estamos rodando o laboratório em local rosto dependendo do seu certificado a sua conversão você não precisa fazer eles tá nós vamos criar dois arquivinhos específicos de extensão tá bom falando que um é do server que vai citar o DNS localhost ou ip127. 0. 1 e vamos jogar isso para um arquivo serve ponto XT o mesmo a gente vai fazer no client tá vamos formando o client para localhost e o IP local tudo isso para que nosso laboratório funcione em local rosto e em certificados produtivos Provavelmente você não vai precisar fazer essa etapa pequena revisão do que fizemos até agora tá definimos a complexidade do algoritmo de criptografia do nosso certificados geramos a chave privada e o certificate da hélice do server do lado do server geramos a chave privada que reconhece do Clinton que enviar para o Bob e para gerar o ela de confiança e ter uma autoridade que vai poder validar tudo isso e Assinar tudo isso nós geramos uma chave privada e Um certificado de ca feito isso criamos dois arquivos de extensão com configurações específicas para a gente rodar Nossa batalha no local host faltou uma etapa que é a mais importante que é gerar de fato os certificados que vão ser tanto do server quanto do Prime para isso nós vamos mudar as seguintes comandos Open SSL x 509 - hack que nós vamos colocar como impute o certificate request Que Nós criamos nos nossos primeiros comandos passando o server CSR depois nós vamos assinar e certificados baseados na entidade certificadora no certificado passando o certificado e a chave privada que nós temos do ca e agora nós vamos extrair um ponto CLT Um certificado para o server com a prazo de validade 335 e um algoritmo de hashi de Shadow 56 E para completar nós vamos incluir a nossa extensão nosso arquivo de configuração adicional para funcionar em local rosto o mesmo vai ser feito para o cliente passando o Klein reconhece passando a mesma entidade certificadora tanto primer quando certificado e gerando o certificado das mesmas configurações com a extensão também aqui nós estamos pegando tanto certifiquei ele reconhece que foi gerado com a chave privada etc e gerando certificado assinado com o ca agora vamos executar o nosso best script que vai gerar os nossos certificados como nós vamos salvar todos eles dentro de uma pastinha chamada certo nós vamos criar uma pastinha Chamada Certa e vamos executar o nosso generadesh vai acontecer bastante coisa na geração de certificado Mas você vai precisar colocar algumas informações essas informações são para o ca para o certificate autorit ele vai te pedir o país com duas letras o estado que você está naquele país uma cidade que você está naquele país Qual que é o nome da sua organização mas caso estamos gerando certificado para eles né então vai ser hélice Qual que é a unidade de negócio cara não precisa colocar nada aqui para esse teste qual como nenhum hélice E aí qual que vai ser o e-mail vai ser contato @ hélice.
com ótimo os nossos certificados estão gerados e são vários certificados nós olharmos na pastinha certo nós vamos ter um monte nós vamos ter três arquivos para o ca os mais importantes são o que e o CRT tá que a chave privado certificado que nós vamos utilizar o nosso exemplo para o client nós vamos ter o certificado nós vamos ter um certificado reconhece nós geramos aquela extensãozinha que a gente conhece ficado e a chave privada do Clinton e esses mesmos quatro existem para o cérebro temos certificado server aquele certificado que nós utilizamos o arquivo de extensão e a chave privada do cérebro e aqui é muito importante o que a hélice precisa enviar para Bob é o Clin [Música] e o ca. crt estes três arquivos que precisam ir para o Bob nenhum outro mais precisa a chave privada de sear porque esse é o ca da hélice tem que ficar em Segredo em sigilo absoluto a chave privada do client tem que ficar em segredo absoluto não é porque nós estamos entregando para Bob que outras pessoas precisam saber e o server ponto que são todas as chaves privadas tem que ficar em segredo absoluto e tá na hora bora falar de código nós vamos subir uma API para hélice em primeiro lugar e depois vamos fazer a requisição do lado do Bob no servidor da hélice nós vamos importar dois módulos o de https e htp que eu tô falando de uma requisição segura com certificado digitais e o modo FS para ler alguns arquivos para linha 12 nós estamos criando este servidor na qual ele vai estar na porta 443 e nas requisições ele vai responder com o header 200 e um conteúdo guia de apseg esse servidor vai precisar de algumas configurações de algumas option nós vamos escrever aqui e essas options vão conter os seguintes dados primeiro como todo servidor de htps você precisa ter uma chave privada e uma chave pública ou no caso Um certificado que tem a chave pública Esses são os dois requisitos mínimos nós vamos passando a chave privada que foi o server. ki que nós geramos e o certificado do Servidor da hélice que é o server.
crt beleza mas nós vamos passar um terceiro parâmetro terceiro certificado que é o ca passando aquele ca. crt que nós geramos duas configurações adicionais que é sempre pedir o certificado e rejeitar que tiver inaltorais tá agora Olhando a parte do clind a hélice já foi lá pegou aqueles arquivos que a gente tava comentando de certificado já mandou para o Bob tá na outra empresa aí o Bob agora vai precisar criar uma finalidade que vai fazer um request para o servidor da hélice então ele vai importar o https tô vendo uma inquisição htps e o módulo FS para ler alguns arquivos pulando para linha 15 nós vamos fazer uma request para p e da hélice né E vamos logar o status code a resposta daquilo ali essa request vai ser a seguinte nós vamos pegar o host name que é local host nesse caso nosso laboratório poderia por exemplo ser o Api hélice. com.
br né digamos assim qual porta porta quatro quatro três Qual o pf é um barra usuários/faturas whatever tá no pf/ na raiz vai ser um método Guedes porque é uma pi que responde conexão get né Beleza E agora diferente da maioria das vezes que para a gente fazer uma requisição a gente não tem que passar certificado a gente tipo vai lá e faz o request Azar o que voltar veio né Só passando a nossa pequi nesse caso nós precisamos informar o certificados e nós precisamos informar a chave privada Nossa como klaring o nosso certificado como klar e o ca que a hélice nos mandou Lembrando que esses certificados certificado do Clinton ele foi assinado com ca da hélice né então o Clint Bob tem o seu certificados também assinados por parte que está em posse da hélice e É nesse momento que a gente entende o conceito de mútuo ao tls porque ambas as partes possuem algo que foi gerado ou assinado pela outra e aqui temos modelo Clint server que seja o Bob conexão para hélice então a hélice gerou certificados e mandou alguns para o Bob no momento que hélice quiserem fazer requisições para sapeios de Bob Bob também vai ter que fazer esse trabalho o Bob vai ter que gerar certificados com a sua ca assinar e enviar alguns desses arquivos para eles e a hélice quando for fazer o request vai ter que passar a chave privada dela vai ter que passar chapada né vai ter que configurar a chave privada dela para fazer a criptografia vai ter que utilizar o certificado dela nessa requisição e o seaque foi gerado pelo Bob então Aqui nós temos os dois lados esse mutual está nisso tá tanto Clinton quanto server terem parte de responsabilidade desse Elo de confiança gerados certificados e quem faz request de quem faz responde tem que fazer todas esse trabalho de gerar certificado e compartilhar esses arquivos tá beleza entendido isso então bora para a execução primeiro de tudo nós vamos subir o server tá que ele vai ficar aguardando requisições e agora olha só que legal nós vamos fazer uma requisição htps normal para esse server tá utilizando curry por htps:/ localhost e vamos passar o menos menos em secure por quê nosso https nosso certificado digital ele é um auto-assinado que nós estamos utilizando em local host não tem uma entidade edificadora Global registrado cai quatro e tal que vão dar o cadeadinho verdinho então nosso certificado ele não é válido perante uma entidade retificadora externa mas ele é válido para nós por isso que a gente tá utilizando esse menos menos esse aqui ao tentar fazer essa requisição nós temos um erro qual erro o dente feio o que aqui ao fazer a comunicação entre eles por ser htps primeiro de tudo tem uma validação de certificados né O que a gente chama de three way Hands shake para validar a chave pública chave privada assinatura etc antes de fato se comunicarem com os dados e esse passo falhou porque porque nós não temos nada daquele certificado por exemplo que o Bob tem porque como a gente tá no Minecraft A gente é o Klein a gente não tem aquela Private do client Aquela aquele certificado do Clayton e nem o ca nós não temos isso então nós temos uma rejeição automática desse request Diferente de quando a gente faz request utilizando esse certificado que nós obtemos a resposta prontinha zeradinha aqui no console entendido até agora uma app que vai garantir que a segurança que todo mundo conhece um segredo e tal para se comunicar um Range de IP vai limitar quem pode se conectar com api quem não pode às vezes não tem um Rage de p fixo então colocar um muto ao tls traz uma camada muito importante de proteção com relação a isso já que nós como serve geramos certificados e nós passamos por uma empresa eles têm que configurar os serviços deles com esse certificado para fazer requisições na nossa p.