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();
}