Histórico de mensagens sobre ssl em pix

EXIBINDO CONVERSAS RECENTES:

Texto: ssl
Canal: pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

js
const express = require("express");
const fs = require("fs");
const https = require("https");
const bodyParser = require("body-parser");
var logger = require('morgan');

const httpsOptions = {
cert: fs.readFileSync(""), // Certificado SSL fullchain do dominio
key: fs.readFileSync("/"), // Chave privada SSL do domínio
ca: fs.readFileSync(""), // Certificado público da Gerencianet - baixe no link: https://pix.gerencianet.com.br/webhooks/chain-pix-prod.crt
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(bodyParser.json());
app.use(bodyParser.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})
);

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

O certificado SSL não pode ser auto assinado, deve ser gerado por uma Autoridade Certificadora válida. Um exemplo seria a Lets Encrypt, que é gratuito

Avatar discord do usuario bmcoder

bmcoder

bom dia alguem aqui teria uma experiencia com a configuração dos certificado ssl em windows server e apache?

Avatar discord do usuario bmcoder

bmcoder

Ver Respostas

boa noite seguindo no msm assunto do webhook estou querendo uma ajuda nesse sentido do ssl estou com dificuldades de configurar

Avatar discord do usuario marcelo_efi

marcelo_efi

Boa tarde <@!868256278101786624>, é necessário ter uma URL válida com o SSL configurado

Avatar discord do usuario bmcoder

bmcoder

Boa noite estou tentando configurar o webhook para usar o sendpix, porém estou com dificuldade na instalação do ssl no apache (os windows) se estiver alguém que possa dá uma luz agradeço

Avatar discord do usuario felcampelo

felcampelo

Ver Respostas

Bom dia pessoal. Estou com o seguinte erro na hora de gerar o token de autenticação do pix (https://api-pix.gerencianet.com.br/oauth/token):
"The SSL connection could not be established, see inner exception. The credentials supplied to the package were not recognized."
Rodando local, funciona. Somente quando publico no meu servidor (IIS 10), é que ocorre o erro. Engraçado que a geração de token para cartão de crédito e boleto funciona perfeitamente. Somente pix está dando problema. Pensei que poderia ser algo no meu servidor mas solicitei via postman de dentro do servidor o token e funcionou também. Tem alguma implementação específica para referenciar o certificado quando é pix? A priori faço:

var client = new RestClient("https://api-pix.gerencianet.com.br/oauth/token");
X509Certificate2 uidCert = new X509Certificate2(certificateName);
client.ClientCertificates = new X509CertificateCollection() { uidCert };

Avatar discord do usuario elinardosilva

elinardosilva

Ver Respostas

Método em php(utilizando laravel) para quem deseja fazer upload e conversão do arquivo p12 para pem

public function convertP12ToPemCertificate(Business $business, $file)
{
if (!isset($file) || !$file->isValid()) {
throw new InvalidPixCertificateException();
}

// get p12 file content
$p12FileContent = file_get_contents($file);
$certificate = [];

// transform p12 file content into array
// passing passphrase empty to be able to open the file without password
openssl_pkcs12_read($p12FileContent, $certificate, '');

// extract privat key
$pkey = null;
if (!isset($certificate['pkey'])) {
throw new InvalidPixCertificateException('Index "pkey" not found');
}
// openssl_pkey_export_to_file($certificate['pkey'], $pkey, '');

// extract privat cert
$cert = null;
if (!isset($certificate['cert'])) {
throw new InvalidPixCertificateException('Index "cert" not found');
}
// openssl_x509_export($certificate['cert'], $cert);
$file_read = "subject=/CN=271207/C=BR\n";
$file_read .= "issuer=/C=BR/ST=Minas Gerais/O=Gerencianet Pagamentos do Brasil Ltda/OU=Infraestrutura/CN=api-pix.gerencianet.com.br/[email protected]\n";
$file_read .= $certificate['cert'];
$file_read .= "Key Attributes: \n";
$file_read .= $certificate['pkey'];

// $pemFileContents = $cert . $pkey;

$gerencianet = $business->gerencianet;
$path = str_replace('{businessId}', $business->id, Business::CERTIFICATE_LOCAL_PATH) . Str::random(40) . '.pem';
Storage::delete($gerencianet->certificate_path);

Storage::put($path, $file_read);
$gerencianet->certificate_path = $path;

$gerencianet->certificate_path;
$gerencianet->save();
}
depois de muita pisa ta tudo funcionando como eu queria

Avatar discord do usuario spontoni

spontoni

SSL connect error

Avatar discord do usuario spontoni

spontoni

Error: SSL connect error

Avatar discord do usuario spontoni

spontoni

da erro de ssl

Avatar discord do usuario Prof Zoidberg

Prof Zoidberg

$config = [
"certificado" => "./gerenciamento.pem",
"client_id" => "XXXXX",
"client_secret" => "XXXXX"
];
$autorizacao = $chaveiro["access_token"];

$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api-pix.gerencianet.com.br/v2/webhook/XXXXX',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => $chaveiro["access_token"],
CURLOPT_POSTFIELDS =>'{
"webhookUrl": "https://XXXXX/webhook.php"
}',
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer $autorizacao",
'x-client-cert-pem: ./gerenciamento.pem',
'x-skip-mtls-checking: false'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Neste exemplo seu está faltando o parâmetro CURLOPT_SSLCERT e CURLOPT_SSLCERTPASSWD

Avatar discord do usuario Prof Zoidberg

Prof Zoidberg

eu recebo essa mensagem de erro: cURL error (35): SSL connect error

Avatar discord do usuario oclopes

oclopes

Ver Respostas

Oi <@!800721458875727872> , bom dia!! Tudo bem? Estou tentando encontrar o erro. Me diga: Eu preciso instalar algum certificado do Gerencianet em meu Servidor? Os erros que tenho são: The credentials supplied to the package were not recognized
One or more errors occurred. (The SSL connection could not be established, see inner exception.)

Avatar discord do usuario oclopes

oclopes

Ver Respostas

Olá Pessoal. tudo bem? Estou conseguindo acessar as apis a partir de uma máquina local sem problemas, porém quando tento chamá-las a partir de um servidor, recebo o erro "The SSL connection could not be established, see inner exception." Estou utilizando o RestSharp para fazer as chamadas. Alguém já passou por isto?

Avatar discord do usuario .teomacedo

.teomacedo

Olá!
Não estou conseguindo fazer funcionar seguindo a referencia desse segundo exemplo proposto na documentação.


:443> # Porta HTTPS
#
# ...
#

ServerName dominiodetestes.com.br
SSLCertificateFile /etc/letsencrypt/live/pixspeak.com.br/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/pixspeak.com.br/privkey.pem

# mTLS Gerencianet
SSLVerifyClient none

SSLVerifyClient require
SSLVerifyDepth 3


#
# ...
#



o retorno que recebo é o seguinte:

{
"nome": "webhook_invalido",
"mensagem": "A URL informada respondeu com o código HTTP 403"
}

____
porem se eu uso o primeiro modelo de exemplo que é indicado para sub-dominios, então funciona.
Enfim, preciso configurar o apache para que os certificados sejam solicitados apenas quando a url for (dominiodetestes.com.br/webhook), mas assim como comentado acima, mesmo usando o modelo da documentação, não estou conseguindo. O que será que estou fazendo de errado?

Avatar discord do usuario rubenskuhl

rubenskuhl

# #
# Utilize o primeiro exemplo, caso queira requerir o certificado para autenticação #
# mútua em qualquer rota do domínio indicado no VirtualHost. #
# Funciona bem para sub-domínios Exemplo: www.webhook.seu_dominio.com.br #
#
#


:443> # Porta HTTPS
#
# ...
#

SSLCertificateFile /caminho_certificado/fullchain_ssl.pem #fullchain associado ao seu certificado SSL do domínio
SSLCertificateKeyFile /caminho_certificado/privkey_ssl.pem #privkey associada ao seu certificado SSL do domínio

# mTLS Gerencianet
SSLCACertificateFile /caminho_certificado/chain-pix-prod.crt #Chave pública da Gerencianet
SSLVerifyClient require
SSLVerifyDepth 3

#
# ...
#




# #
# Utilize o segundo exemplo, caso queira requerir o certificado para autenticação #
# mútua em apenas uma rota do domínio indicado no VirtualHost. #
# Exemplo: www.seu_dominio.com.br/webhook #
# #


:443> # Porta HTTPS
#
# ...
#

SSLCertificateFile /caminho_certificado/fullchain_ssl.pem #fullchain associado ao seu certificado SSL do domínio
SSLCertificateKeyFile /caminho_certificado/privkey_ssl.pem #privkey associada ao seu certificado SSL do domínio

# mTLS Gerencianet
SSLVerifyClient none

SSLVerifyClient require
SSLVerifyDepth 3


#
# ...
#

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

Boa tarde, @Deleted User. Esses certificados são emitidos por uma entidade certificadora, como o Certbot por exemplo. Você consegue isso em hospedagens que fornecem um domínio com SSL. No entanto, em hospedagens compartilhada,s a inclusão do CA disponibilizado em nossa documentação costuma não ser possível. Essa restrição é do próprio sistema de hospedagem e na maior parte dos casos você vai precisar de um servidor dedicado.