Histórico de mensagens sobre ssl em pix

EXIBINDO CONVERSAS RECENTES:

Texto: ssl
Canal: pix
Avatar discord do usuario amadeujunior18

amadeujunior18

$filename_p12 = 'caminho do certificado p12';
$password = '';
$results = array();
$worked = openssl_pkcs12_read(file_get_contents($filename_p12), $results, $password);
if ($worked) {
file_put_contents('newcert.pem', $results['cert'] . PHP_EOL . $results['pkey']);
} else {
'Deu erro';
}

Avatar discord do usuario kleyber_

kleyber_

Ver Respostas

Pessoal, voltando aos testes aqui no Mac... então, já importei tanto o arquivo .P12 quanto o arquivo .PEM, e alterei a confiabilidade de ambos, regerei minha aplicação em PHP, mas o erro:
SSL: Can't load the certificate "./certificado/developer166379.pem" and its private key: OSStatus -61
persiste...

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

O que não impede vários ports de requisitarem o OpenSSL... o LibreSSL é legal, mas a customização dele no macOS, o Secure Transport, bem chatinho.

Avatar discord do usuario kleyber_

kleyber_

Ver Respostas

O caso aqui é que o MacOS Catalina já tem o LibreSSL que é o substituto do OpenSSL

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Tente compilar seu próprio curl usando OpenSSL (o padrão do Mac é usar a biblioteca Secure Transport do sistema).

Compile e instale o OpenSSL via Homebrew:
brew install curl --with-openssl
brew install php56 --with-homebrew-curl
brew link curl --force
curl --version

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

O macOS tem forte preferência pelo .p12 ao invés do .pem:
https://stackoverflow.com/questions/40712352/curl-error-58-ssl-cant-load-the-certificate-and-its-private-key-osstat

Então além de usar o /p12. eu tentaria usar o Keychain Access para importar o certificado raiz da Gerencianet e atribuir-lhe status de confiável.

Avatar discord do usuario kleyber_

kleyber_

Ver Respostas

Pessoal boa tarde... continuo aqui com o mesmo problema quando tento testar via localhost aqui no meu Macbook... já instalei o certificado no KeyAccess, mas na hora de criar o token usando o certificado, sempre dá a mensagem:
SSL: Can't load the certificate "./certificado/developer166379.pem" and its private key: OSStatus -61
Não tem ninguém da Gerencianet que pudesse fazer esse teste em um Mac?
Já pesquisei demais e estou quase fritando o cérebro por causa disto...

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

Só passando aqui a contribuição da <@!513728938414047232> da falha : The SSL connection could not be established. A solução encontrada foi passar o certificado no HttpClient através de um handler:

X509Certificate2 uidCert = new X509Certificate2(@".\certificado.p12");

var handler = new HttpClientHandler();
handler.ClientCertificates.Add(uidCert);

var client = new HttpClient(handler);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

Avatar discord do usuario Krisdhya

Krisdhya

Ver Respostas

Desenvolvimento, o erro é este: The SSL connection could not be established

Avatar discord do usuario rubenskuhl

rubenskuhl

openssl @1.1.1i devel/openssl

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Eu tenho sim algumas versões de OpenSSL instaladas via MacPorts.

Avatar discord do usuario kleyber_

kleyber_

Ver Respostas

Estou começando a desconfiar que o problema é com o SSL

Avatar discord do usuario kleyber_

kleyber_

Ver Respostas

E você teve que instalar algo de SSL pra funcionar?

Avatar discord do usuario kleyber_

kleyber_

SSL: Can't load the certificate "../_lib/libraries/sys/LibPix/files/certificates/developer166379.pem" and its private key: OSStatus -61

Avatar discord do usuario pro4win

pro4win

Ver Respostas

ChilkatLog:
Connect_Socket:
ChilkatVersion: 9.5.0.83
Component successfully unlocked using purchased unlock code.
clsSocketConnect:
hostname: api-pix.gerencianet.com.br
port: 443
tls: True
maxWaitMs: 5000
socket2Connect:
connect2:
connectImplicitSsl:
connectSocket:
connect_ipv6_or_ipv4:
resolveHostname6:
getAddressInfo:
Failed to get host address info. (3)
SocketError: WSAHOST_NOT_FOUND No such host is known.
hostOrIpAddr: api-pix.gerencianet.com.br
port: 443
Versions of Windows earlier than Windows XP are limited to handling IPv4 only
On Windows Server 2003 and Windows XP, IPv6 addresses are returned only if IPv6 is installed on the local computer.
--getAddressInfo
--resolveHostname6
Domain to IP address resolution failed.
--connect_ipv6_or_ipv4
--connectSocket
--connectImplicitSsl
ConnectFailReason: DNS lookup failed
--connect2
--socket2Connect
Failed.
--clsSocketConnect
Failed.
--Connect_Socket
--ChilkatLog

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Em um outro ecossistema de APIs, uma coisa que causava isso era versão desatualizada de OpenSSL. Mas se se aplica ou não nesse caso, é especulação.

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Problemas desse tipo vão afetar toda comunicação dessa máquina, mas o TCP é um protocolo bastante resiliente... você pode tentar outras atividades que também envolvam SSL e ver se o problema se reproduz nelas.

Avatar discord do usuario felipoantonoff

felipoantonoff

Usei o Curl da Lib PHP, com pequena adição de logs, segue o Curl usado:

php
$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => $pix_url_cob,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 8,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_SSLCERT => $arq_certificado,
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => [
"authorization: $tokenType $accessToken",
"Content-Type: application/json",
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);
if ($err) {
$this->log->write('emitePix() - Error Curl' . print_r($err, true));
return false;
}

$this->log->write('emitePix() - Error Curl' . print_r($err, true));

$this->log->write('emitePix() - Response ' . print_r($response, true));"

Curioso, que parece ocorrer só nesta chamada, a autorização não ocorre isso.
Uso o PHP 7.2 no servidor e com HTTPS.

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Bom dia! <@!779211471829729292> A configuração que possuímos é a mesma que o Rubens citou anteriormente.
server {
#
# ...
#
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate server_ssl.crt.pem;
ssl_certificate_key server_ssl.key.pem;
ssl_client_certificate /root/chain-pix-webhooks-prod.crt;
ssl_verify_client optional;
#
# ...
#
location /webhook {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
rewrite ^(.)$ /webhook;
}
}

Avatar discord do usuario rubenskuhl

rubenskuhl

Eu sugiro ssl_verify_client on se todo o vhost for exclusivo do webhook. Aí não precisa da parte de location /webhook.