bacen / pix-api

API Pix: a API do Arranjo de Pagamentos Instantâneos Brasileiro, Pix, criado pelo Banco Central do Brasil.
https://bacen.github.io/pix-api
2.36k stars 267 forks source link

Certificado mTLS #572

Open johngalt85 opened 1 year ago

johngalt85 commented 1 year ago

Boa tarde,

Quanto ao requisito de segurança mTLS, em leitura ao Manual de Padrões para Iniciação do Pix v2.6.3, página 46 item 2 c:

"O Authorization Server do PSP deve implementar a técnica de vinculação do certificado do cliente aos access tokens emitidos (“Client Certificate-Bound Access Tokens”), conforme seção 3 da RFC 8705."

Isso signiifca que o PSP deve obrigatoriamente validar se o acess token gerado é de titularidade do certificado apresentado no momento das chamadas da API? Pois quando se trata de webhook, a documentação é literal em enfatizar ser recomendável, porém esclarece que - "não há objeção quanto à utilização de outros certificados, mediante acordo entre o PSP e o usuário recebedor."

Já nas chamdas da API, essa flexibilidade não está explícita, porém fiquei em dúvidas se o trecho transcrito acima da página 46 item 2 c, está vedando essa flexibilidade.

A dúvida é, posso fechar o mTLS com qualquer certificado confiável para o PSP recebedor apresentado na chamada, independente das credenciais OAuth serem de outro cliente?

rubenskuhl commented 1 year ago

Se misturaram dois temas acima: CA emissora dos certificados e certificados propriamente ditos.

Os certificados precisam ser sempre emitidos para o correntista fazendo a transação ou recebendo o webhook... agora, se quem emitiu os certificados foi o PSP, foi um prestador ICP-Brasil, foi uma CA confiável do CA/B Forum, tanto faz.

A possibilidade de modelos OAuth com alguém representando terceiro já foi levantada aqui no fórum, e o BACEN diz que na versão atual, não.

johngalt85 commented 1 year ago

@rubenskuhl obrigado por responder, minha dúvida está atrelada especificamente a certificados propriamente ditos e não a CA emissora. Um provedor de solução TEF ou qualquer ERP que faça frente de caixa, deve obrigatoriamente apresentar na chamada o certificado propriamente dito de titularidade do correntista também titular das credenciais? O PSP Recebedor é obrigado a fazer a checagem se o certificado apresentado para fechar o mTLS é do mesmo CNPJ titular das credenciais? Ou o certificado sendo confiável para o PSP Recebedor já é o suficiente? E portanto pode ser usado o mesmo certificado para várias credenciais?

Pois lendo toda a documentação do BACEN, essa obrigatoriedade ou eventual flexibilidade não fica explícita, para as chamadas da API, tal qual está explícita no uso do webhook, veja página 53 do Manual de Padrões para IniciacaodoPix

  1. Para a funcionalidade de webhooks, as notificações oriundas do PSP recebedor ao usuário recebedor trafegarão utilizando um canal mTLS. a. Recomenda-se que os certificados utilizados para autenticação mútua no canal TLS do webhook sejam os mesmos da API Pix. De todo modo, não há objeção quanto à utilização de outros certificados, mediante acordo entre o PSP e o usuário recebedor.
rubenskuhl commented 1 year ago

Sim para as duas primeiras perguntas, não para as duas últimas.

A interpretação que você está tentando fazer é bem torta, e o histórico de postagens do BACEN neste repositório deixa bem claro que isso não vai colar.

rubenskuhl commented 1 year ago

Reler o #83 pode ajudar nesta questão.