Histórico de mensagens sobre ssl

EXIBINDO CONVERSAS RECENTES:

Texto: ssl
# pix
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 };

# pix
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

# pix
Avatar discord do usuario spontoni

spontoni

SSL connect error

# pix
Avatar discord do usuario spontoni

spontoni

Error: SSL connect error

# pix
Avatar discord do usuario spontoni

spontoni

da erro de ssl

# pix
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;

# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

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

# pix
Avatar discord do usuario Prof Zoidberg

Prof Zoidberg

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

# pix
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.)

# pix
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?

# pix
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?

# pix
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


#
# ...
#

# pix
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.

# pix
Avatar discord do usuario luizgerencianet

luizgerencianet

# Gerar certificado e chave separadas
openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys #certificado
openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes #chave privada

# pix
Avatar discord do usuario ajcastello

ajcastello

certo, estou pesquisando para entender melhor como aplicar o mTLS ao Firebase, porém com dificuldade, uma vez que ele possui uma lib para as functions e já aplica um SSL.

# pix
Avatar discord do usuario bruno_2z1790

bruno_2z1790

Conseguimos resolver 😄 na verdade era um problema bem simples....

Estavamos utilizando o retorno igual consta na documentação de vocês (nginx):

rewrite ^(.)$ /webhook;

porém, pelo fato de estarmos usando Laravel (versão 4.2), o que funcionou foi o retorno:

try_files $uri $uri/ /index.php?$query_string;

Ficando então:

location ^~ /gerencianet/webhook {
if ($ssl_client_verify != SUCCESS) {
return 403;
}

try_files $uri $uri/ /index.php?$query_string;
}

# pix
Avatar discord do usuario luizotavio5072

luizotavio5072

Ver Respostas

Boa tarde pessoal. Eu não consegui atualizar meu servidor de produção porque ele está dando um problema de disco cheio em /boot. Mas eu configurei um SSL no meu servidor de homologação e lá o nodejs está atualizado e deu certo. Então acredito que esse problema seja sim a versão do nodejs. No meu servidor de produção a versão do node é V9.4.0 e em homologação é V13.14.0. Então fica de feedback caso haja com outros usuários esse problema.

# pix
Avatar discord do usuario wesleykovalski

wesleykovalski

private function send(string $method, string $resource, array $request = [])
{
// ENDPOINT COMPLETO
$endpoint = $this->baseUrl . $resource;

// HEADERS
$headers = [
'Cache-Control: no-cache',
'Content-type: application/json',
'Authorization: Bearer ' . $this->getAccessToken()
];

// CONFIGURAÇÃO DO CURL
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $endpoint,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_SSLCERT => $this->certificate,
CURLOPT_SSLCERTPASSWD => '',
CURLOPT_HTTPHEADER => $headers
]);

switch ($method) {
case 'POST':
case 'PUT':
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($request));
break;
}

// EXECUTA O CURL
$response = curl_exec($curl);
curl_close($curl);

// RETORNA O ARRAY DA RESPOSTA
return json_decode($response, true);
}

# pix
Avatar discord do usuario wesleykovalski

wesleykovalski

Segue o código:

// ENDPOINT COMPLETO
$endpoint = $this->baseUrl . '/oauth/token';

// HEADERS
$headers = [
'Content-type: application/json',
'x-skip-mtls-checking: true'
];

// CORPO DA REQUISIÇÃO
$request = [
'grant_type' => 'client_credentials',
'webhookUrl' => 'https://www.dominio.com.br/endpointdowebhook'
];


// CONFIGURAÇÃO DO CURL
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $endpoint,
CURLOPT_USERPWD => $this->clientId . ':' . $this->clientSecret,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode($request),
CURLOPT_SSLCERT => $this->certificate,
CURLOPT_SSLCERTPASSWD => '',
CURLOPT_HTTPHEADER => $headers
]);