Histórico de mensagens sobre mtls em pix

EXIBINDO CONVERSAS RECENTES:

Texto: mtls
Canal: pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Pra quem tem dificuldades de implementar os webhooks por falta de suporte em hospedagem compartilhada para configurar mTLS, o Pix.ae agora oferece proxy de callbacks com mTLS.

Pra usar é muito simples: é só prefixar o seu domínio com mtls.pix.ae/. Por exemplo:

Para: https://exemplo.com.br/webhookpix
Use: https://mtls.pix.ae/exemplo.com.br/webhookpix

Obs: no ambiente de homologação, prefixe com mtls-h.pix.ae/

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Opção mais high-end seria usar o API Gateway da AWS, que você pode usar mesmo que seu servidor não fique na AWS.
Opção mais simples seria usar o mtls.pix.ae.

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

O / é usado apenas na ativação do webhook, para confirmar que o webhook está respondendo e tem mTLS habilitado.
O /pix é o que é ativado para cada pagamento recebido ou devolução completada.

O Banco Central nunca disse claramente o motivo disso, mas a minha teoria é de que eles imaginavam que o webhook poderia sinalizar mudança de status em outros objetos como a cobrança. Mas na API Pix atualmente, só o o objeto pix está sendo sinalizado.

Avatar discord do usuario jessica_efi

jessica_efi

Você ja fez toda a configuração do mTLS no seu servidor?

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Em nossa documentação nós temos exemplos de configurações com alguns tipos de servidores, incluindo Node e nGinx. https://dev.gerencianet.com.br/docs/api-pix-endpoints#section-exemplos-de-configura-es-de-servidor
No seu caso, acredito que você terá de configurar o mTLS no nGinx, que será a ponta que vai receber a notificação vinda da Gerencianet para fazer o hand-shake.

Avatar discord do usuario catalunha

catalunha

Olá @rubenskuhl @Efí e demais colegas
Refiz todo o processo na tentativa de usar Gateway da AWS, Google Domains e Back4app para integrar WebHook PIX. Baseado no tutorial do Ciolfi em https://www.youtube.com/playlist?list=PLR5GUTqrcwXiA_JVKx8NDSJtaECeQO9AZ
Com sucesso ate no ponto em que peço :

Parse.Cloud.define('config-webhook',async(req)=>{
// options['validateMtls'] = true;
let body = {
"webhookUrl": "https://api1.brintec.org/prod/webhookpix1"
}

let params = {
chave: "[email protected]"
}
let gerencianet = new Gerencianet(options);


const result = await gerencianet.pixConfigWebhook(params, body);
return result;
});

E o return é:

{
"code": 141,
"error": {
"nome": "webhook_invalido",
"mensagem": "A requisição na URL informada falhou com o erro: ERR_TLS_CERT_ALTNAME_INVALID"
}
}

Alguma sugestão ?

Avatar discord do usuario rubenskuhl

rubenskuhl

O que também já foi citado no canal foi:

Para usar o serviço de mtls na amazon usando uma API Gateway, é preciso criar um Alias ( enão um cname comum). Ai sucesso!

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Tem uma opção que é o pix.ae...

Pra quem tem dificuldades de implementar os webhooks por falta de suporte em hospedagem compartilhada para configurar mTLS, o Pix.ae agora oferece proxy de callbacks com mTLS.

Pra usar é muito simples: é só prefixar o seu domínio com mtls.pix.ae/. Por exemplo:

Para: https://exemplo.com.br/webhookpix
Use: https://mtls.pix.ae/exemplo.com.br/webhookpix

Obs: no ambiente de homologação, prefixe com mtls-h.pix.ae/

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Todo o histórico aqui de Google Cloud é de não funcionar... eu cheguei a consultar uma pessoa do Google que confirmou que à época mTLS com CA privada não era uma opção. Em algum momento eles podem lançar, mas não consta que isso já tenha acontecido.

Avatar discord do usuario julianosenfft

julianosenfft

Boa noite! Existe alguma solução do webhook/certificado mtls pra servidores do Vercel?

Avatar discord do usuario guilherme_efi

guilherme_efi

Exatamente. A Gerencianet vai continuar a enviar o certificado na requisição, mas como mencionado, seu servidor irá ignorá-lo.
No entanto é aconselhável que você encontre uma forma de validar se é a Gerencianet quem está enviando a notificação, pois, sem o mTLS configurado não há o "hand-shake". Uma sugestão é verificar o IP de quem está notificando, pois a Gerencianet comunica os webhook através do IP 34.193.116.226

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Essa flag desabilita apenas a checagem. Os requisitos do BACEN ainda obrigam a usar mTLS, essa flag apenas diz que você vai fazer a checagem de mTLS de outra forma.

Avatar discord do usuario daniel.polifabro

daniel.polifabro

x-skip-mtls-checking

Avatar discord do usuario daniel.polifabro

daniel.polifabro

Estou utilizando uma flag que desativa o mTLS

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Boa tarde, @daniel.polifabro. Tudo bem?
Qual sua dúvida?
Você já possui um domínio apontado para algum servidor rodando Node, Apache, Nginx para que possa configurar o mTLS?

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Experimente usar o exemplo da GN mas com "rejectUnauthorized: true". Aí na hora que nada mais no seu site funcionar, você vai saber que deu certo, pq vc estaria exigindo mTLS no site inteiro. Voltando pra false, aí entra a lógica que a GN fez para só exigir numa pasta específica.

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

O exemplo que tem na documentação da GN é assim:

const express = require("express");
const fs = require("fs");
const https = require("https");
var logger = require('morgan');

const httpsOptions = {
cert: fs.readFileSync(""), // Certificado fullchain do dominio
key: fs.readFileSync("/"), // Chave privada do domínio
ca: fs.readFileSync(""), // Certificado público da Gerencianet
minVersion: "TLSv1.2",
requestCert: true,
rejectUnauthorized: false, //Mantenha como false para que os demais endpoints da API não rejeitem requisições sem MTLS
};

const app = express();
const httpsServer = https.createServer(httpsOptions, app);
const PORT = 443;

app.use(logger('dev')); // Comente essa linha caso não queira que seja exibido o log do servidor no seu console
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

// Endpoint para configuração do webhook, você precisa cadastrar https://SEUDOMINIO.com/webhook
app.post("/webhook", (request, response) => {
// Verifica se a requisição que chegou nesse endpoint foi autorizada
if (request.socket.authorized) {
response.status(200).end();
} else {
response.status(401).end();
}
});

// Endpoind para recepção do webhook tratando o /pix
app.post("/webhook/pix", (request, response) => {
if (request.socket.authorized){
//Seu código tratando a callback
/ EXEMPLO:
var body = request.body;
filePath = __dirname + "/data.json";
fs.appendFile(filePath, JSON.stringify(body) + "\n", function (err) {
if (err) {
console.log(err);
} else {
response.status(200).end();
}
})
/
response.status(200).end();
}else{
response.status(401).end();
}
});

httpsServer.listen(PORT, () =>
console.log(Express server currently running on port ${PORT})
);
#Desenvolvido pela Consultoria Técnica da Gerencianet

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Essas plataformas prontas dificilmente tem configuração versátil o suficiente para mTLS com CA privada... por isso que os exemplos da GN são para quem tem controle específico do webserver, seja Express, nginx, Apache etc.

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Você precisa de 2 coisas para receber webhook:
1) Configuração do servidor web para que numa pasta ou sub-domínio seja exigido mTLS com CA da Gerencianet
2) Um atendedor nessa pasta ou sub-domínio para / e para /pix.