Histórico

EXIBINDO CONVERSAS RECENTES:

Texto: ssl
# pix
Avatar discord do usuario joao.dbm

joao.dbm

Ver no Discord

Boa tarde a todos, estou com um webhook nodejs, rodando em EasyPanel dentro de ubuntu, as chaves SSL e certificados estão todos funcionando. a EFI consegue acessar sem nenhum problema. Porém, quando adiciono "socket.authorized" que está comentado na documentação, e vi em outros videos do YT, mostra erro 401. Posso ignorar este comando "socket.authorized"?

# pix
Avatar discord do usuario .lortega

.lortega

Ver no Discord

Boa tarde, eu gerei o certificado de homologação, usei o comando "openssl pkcs12 -in certificado.p12 -out certificado.pem -nodes -password pass:""
E usei o Postman seguindo o tutorial que vocês forneceram para pegar o token de homologação, mas recebo a mensagem: Error: BAD_PKCS12_DATA, podem me orientar?

# devs
Avatar discord do usuario jrrdsknd

jrrdsknd

Ver RespostasVer no Discord

bom dia, eu to com um codigo aqui que fiz, acredito que possa ajudar bastante algumas pessoas com problema em webhook, aqueles certificados ssl e etc, eu posso compartilhar aqui?

# pix
Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

Ver no Discord

Meu Webhook: public function webhook() {
$body = '{
"webhookUrl": "https://julioerp.agenciaweblab.com.br/webhook.php"
}';
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->config['rotas'] . '/v2/webhook/' . $this->config['chave_pix']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_SSLCERT, $this->config["certificado"]);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '');
$headers = array();
$headers[] = 'Authorization: Basic ' . $this->access_token;
$headers[] = 'X-Skip-Mtls-Checking: true';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);

echo '

';
var_dump($this->config['chave_pix'], $this->config['client_id'], $this->config['client_secret'], $result);
echo '
';

if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $result;
} catch (Exception $e) {
echo '
';
var_dump($e->getCode(), $e->getFile(), $e->getMessage());
echo '
';
}
}

# pix
Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

Ver RespostasVer no Discord

Estou executando este método:
public function webhook() {
$body = '{
"webhookUrl": "https://julioerp.agenciaweblab.com.br/webhook.php"
}';
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->config['rotas'] . '/v2/webhook/' . $this->config['chave_pix']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_SSLCERT, $this->config["certificado"]);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, '');
$headers = array();
$headers[] = 'Authorization: Bearer ' . $this->access_token;
$headers[] = 'X-Skip-Mtls-Checking: true';
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);

echo '

';
var_dump($this->config['chave_pix'], $result);
echo '
';

if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $result;
} catch (Exception $e) {
echo '
';
var_dump($e->getCode(), $e->getFile(), $e->getMessage());
echo '
';
}
}

# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver no Discord

Oi, @alissonmaciel_32335. Bom dia!
Você precisa enviar o certificado em todas as requisições, não apenas na autenticação.
Adicione o código com o caminho do certificado.

php
CURLOPT_SSLCERT => $certificado, // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",

# devs
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver RespostasVer no Discord

No momento se você rodar o https://www.ssllabs.com/ssltest/ , o que aparece ?

# devs
Avatar discord do usuario buenolitz

buenolitz

Ver RespostasVer no Discord

Pessoal, alguém conseguiria me ajudar na criação do certificado SSL com certbot ? Estou travado nesse ponto para criação do meu servidor webhook
Já vi alguns videos tanto da Efi quanto de fora mas sempre estou tendo o mesmo erro

# pix
Avatar discord do usuario buenolitz

buenolitz

Ver RespostasVer no Discord

@igor_efi Estou com alguns problemas em gerar a chave ssl, existe algum video da Efi mostrando a utilização de certbot ?

# pix
Avatar discord do usuario cseabra.

cseabra.

Ver no Discord

bom dia! Estou tendo o seguinte problema ao fazer uso do SDK Java (estava funcionando há um tempo atrás):

mensagem:

java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

stack:

at br.com.efi.efisdk.Request.send(Request.java:51) ~[sdk-java-apis-efi-1.0.0.jar:na]
at br.com.efi.efisdk.Auth.authorize(Auth.java:63) ~[sdk-java-apis-efi-1.0.0.jar:na]
at br.com.efi.efisdk.APIRequest.send(APIRequest.java:61) ~[sdk-java-apis-efi-1.0.0.jar:na]
at br.com.efi.efisdk.Endpoints.kernelCall(Endpoints.java:129) ~[sdk-java-apis-efi-1.0.0.jar:na]
at br.com.efi.efisdk.Endpoints.call(Endpoints.java:94) ~[sdk-java-apis-efi-1.0.0.jar:na]

mais alguém?

# pix
Avatar discord do usuario igor_efi

igor_efi

Ver RespostasVer no Discord

Bom dia, @buenolitz! Tudo bem?
Aparentemente o certificado SSL do seu dominio não foi criado corretamente.
Com você configurou o SSL do dominio?

# pix
Avatar discord do usuario buenolitz

buenolitz

Ver RespostasVer no Discord

Esse é o retorno de erro de SSL Client

imagem enviada na mensagem pelo usuario buenolitz

# pix
Avatar discord do usuario ronaldo_pertec

ronaldo_pertec

Ver no Discord

processing: https://pix.api.efipay.com.br/oauth/token
Trying 52.3.67.197:443...
Connected to pix.api.efipay.com.br (52.3.67.197) port 443
CAfile: none
CApath: none
ALPN: offers http/1.1
NSS: client certificate from file
subject: C=BR,CN=301970
start date: May 19 20:28:50 2021 GMT
expire date: May 19 20:28:50 2024 GMT
common name: 301970
issuer: [email protected],CN=api-pix.gerencianet.com.br,OU=Infraestrutura,O=Gerencianet Pagamentos do Brasil Ltda,ST=Minas Gerais,C=BR
ALPN: server accepted http/1.1
SSL connection using TLS_AES_256_GCM_SHA384
Server certificate:
subject: CN=.api.efipay.com.br,O=EFI S.A. - INSTITUICAO DE PAGAMENTO,L=OURO PRETO,ST=MINAS GERAIS,C=BR
start date: May 17 19:31:27 2023 GMT
expire date: Jun 17 19:31:26 2024 GMT
common name: .api.efipay.com.br
issuer: CN=GlobalSign RSA OV SSL CA 2018,O=GlobalSign nv-sa,C=BE
using HTTP/1.1
> POST /oauth/token HTTP/1.1
Host: pix.api.efipay.com.br
api-sdk: efi-php-1.8.0
User-Agent: GuzzleHttp/7
Content-Type: application/json
Authorization: Basic Q2xpZW50X0lkXzcwMWE0OGU2ZWExMDM0ODk5NjAxNTIzY2VmZjY5ZTZlM2M4OGVjMDA6Q2xpZW50X1NlY3JldF9hMDYyZmU5OWE0NjhmYjViZjIzZmE0YzgwMTUyZDFlM2RhNWIzNjFj
Content-Length: 35

Empty reply from server
Closing connection

# pix
Avatar discord do usuario ronaldo_pertec

ronaldo_pertec

Ver no Discord

Agora estou recebendo a seguinte mensagem:
processing: https://pix.api.efipay.com.br/oauth/token
Trying 35.170.124.249:443...
Connected to pix.api.efipay.com.br (35.170.124.249) port 443
CAfile: none
CApath: none
ALPN: offers http/1.1
NSS: client certificate from file
subject: C=BR,CN=301970
start date: May 02 14:50:05 2024 GMT
expire date: May 02 14:50:05 2027 GMT
common name: 301970
issuer: [email protected],CN=apis.efipay.com.br,OU=Infraestrutura,O=Efi S.A. - Instituicao de Pagamento,ST=Minas Gerais,C=BR
ALPN: server accepted http/1.1
SSL connection using TLS_AES_256_GCM_SHA384
Server certificate:
subject: CN=.api.efipay.com.br,O=EFI S.A. - INSTITUICAO DE PAGAMENTO,L=OURO PRETO,ST=MINAS GERAIS,C=BR
start date: May 17 19:31:27 2023 GMT
expire date: Jun 17 19:31:26 2024 GMT
common name: .api.efipay.com.br
issuer: CN=GlobalSign RSA OV SSL CA 2018,O=GlobalSign nv-sa,C=BE
using HTTP/1.1
> POST /oauth/token HTTP/1.1
Host: pix.api.efipay.com.br
api-sdk: efi-php-1.8.0
User-Agent: GuzzleHttp/7
Content-Type: application/json
Authorization: Basic Q2xpZW50X0lkXzcwMWE0OGU2ZWExMDM0ODk5NjAxNTIzY2VmZjY5ZTZlM2M4OGVjMDA6Q2xpZW50X1NlY3JldF9hMDYyZmU5OWE0NjhmYjViZjIzZmE0YzgwMTUyZDFlM2RhNWIzNjFj
Content-Length: 35

Empty reply from server
Closing connection

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver RespostasVer no Discord

OpenSSL desatualizado, talvez ?

# pix
Avatar discord do usuario thiagorobles

thiagorobles

Ver RespostasVer no Discord

fiz a alteração abaixo, adicionei o cert e a key que baixei no momento da criação da aplicação

private instance = axios.create({
httpsAgent: new https.Agent({
cert: Buffer.from(process.env.EFI_CERT, 'base64'),
key: Buffer.from(process.env.EFI_KEY, 'base64'),
ca: Buffer.from(process.env.CHAIN_PIX_PROD_CRT_BASE64, 'base64'),
requestCert: true,
rejectUnauthorized: true,
}),
headers: {
'x-skip-mtls-checking': true,
},
});

Agora o erro que recebo é unable to get local issuer certificate

parece ser algo relacionado ao SSL, porem está configurado corretamente pelo ACM do heroku

essas variaveis de ambiente estao configuradas pelo heroku, fiz o encode para base64, loguei o resultado do Buffer.from, e está logando os certificados corretamente (cert, key e ca)

# pix
Avatar discord do usuario thiagorobles

thiagorobles

Ver RespostasVer no Discord

@rubenskuhl obrigado pelo retorno, eu tentei integrar no meu Controller (uso nestjs) na minha API que está no heroku, aqui está o código:

import {
ClassSerializerInterceptor,
Controller,
HttpCode,
HttpStatus,
Logger,
Post,
Req,
UseInterceptors,
} from '@nestjs/common';
import { LoggerInterceptor } from '@src/common/logger/logger-interceptor';
import configuration from '@src/config/configuration';
import axios from 'axios';
import { Request } from 'express';
import as https from 'https';

const { httpsOptions } = configuration();
@Controller('efi-gerencianet')
@UseInterceptors(ClassSerializerInterceptor, LoggerInterceptor)
export class EfiGerencianetController {
private readonly logger = new Logger(EfiGerencianetController.name);

private instance = axios.create({
httpsAgent: new https.Agent({
ca: httpsOptions.ca,
requestCert: true,
rejectUnauthorized: true,
}),
headers: {
'x-skip-mtls-checking': true,
},
});

@Post('webhook/pix')
@HttpCode(HttpStatus.OK)
handlePixCallback(@Req() req: Request) {
const body = req.body;

this.logger.log(Received callback from Gerencianet);
this.logger.debug(body);
return body;
}

@Post('configure-webhook')
async configureWebhook() {
const url =
'https://api-pix.gerencianet.com.br/v2/webhook/4114c4e9-202c-4979-8534-34a4e5a29ad0';
const data = {
webhookUrl: '',
};

try {
const response = await this.instance.put(url, data);
this.logger.log(
Webhook configured successfully. Status code: ${response.status},
);
return response.data;
} catch (error) {
this.logger.error(Error configuring webhook: ${error.message});
throw new Error(Error configuring webhook: ${error.message});
}
}
}


subi pra produção, e ao chamar o endpoint recebo o erro: Error: Error configuring webhook: read ECONNRESET

Para SSL estou usando o heroku ACM (auto managed).


Sabem o que posso estar fazendo errado?

# pix
Avatar discord do usuario igor_efi

igor_efi

Ver RespostasVer no Discord

Onde você tratou o location?

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

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver RespostasVer no Discord

Um possível parâmetro para isso seria o header X-SSL-CERT ou X-Client-Certificate. Quem pode te dizer qual parâmetro é, se é que sua hospedagem faz isso, é a hospedagem.