Script to convert .P12 to .CER

1

Hello dear community,

I would like to know a way to convert from .p12 to .cer from my web I have been thinking that it could be possible through a script

the logic is as follows

uploads the .p12 document

button to eject document with extension.CER

I hope you can help me.

    
asked by AlexCodekiller 14.08.2018 в 16:16
source

2 answers

0

This command makes you what you are looking for, you should execute it in a script that is called from your web with the file that the user enters:

openssl pkcs12 -in certificate.p12 -out certificate.cer -nodes

Are you trying to do something like that? link

If you read the difference between .p12 and .cer, you will see that what you are trying to do should not be done (assuming it could be done)

link

    
answered by 14.08.2018 в 16:23
0

To do the job you want with native PHP functions you need to use:

With openssl_pkcs12_read() we will obtain an array with the indexes cert and pkey . The one we are interested in using in the next step is pkey .

With openssl_pkey_export() we convert an input certificate (in this case, in the form of a PEM encoded string) into an output certificate encoded in PEM in the parameter passed by reference.

Both functions return true if the process went well (the passwords and their passwords are valid) or false if an error occurred.

An example of use could be:

<?php
/* Definimos dónde está alojado el archivo .p12 */
$archivo = $_FILES[...];
$clave = '(contraseña, si la tiene)';
$resultado = [];
$ok = openssl_pkcs12_read(file_get_contents($archivo), $resultado, $clave);
if($ok === false) {
    die(openssl_error_string());
}
/* 'pkey' es la clave privada obtenida en la función anterior */
$ok = openssl_pkey_export($resultado['pkey'], $resultado, $clave);
if($ok === false) {
    die(openssl_error_string());
}
/* El contenido del certificado .cer está en $resultado */

Proof of concept with a p12 file encoded in base64 for easy use here:

<?php
$clave = 'clave';
$resultado = [];
$ok = openssl_pkcs12_read(
  base64_decode('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'),
  $resultado, $clave);
if($ok === false) {
    die(openssl_error_string());
}
/* 'pkey' es la clave privada obtenida en la función anterior */
$ok = openssl_pkey_export($resultado['pkey'], $resultado, $clave);
if($ok === false) {
    die(openssl_error_string());
}
/* El contenido del certificado .cer codificado en PEM está en $resultado */
echo '<pre>', htmlspecialchars($resultado), '</pre>', PHP_EOL;

The result displayed in the browser will be:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIlnyKjoQqmmwCAggA
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECGcvfJDJhibrBIIEyJ7PLbqhKEFb
0BzmNK8nrd2oVviHFEJojeM+CoyEIkHO+mnheO2tA3yVirdqvf0vuPvkQva3068L
ICf67pkdIYiZzrYKmhsjRaIc/EnqfzvE0K2s/NVBj2Xhb7YWei9353M9wvlb6mnf
GfD10vEvCWiylgrwLyQ0rIOHF1IG3SlC/lfU2JAGyMrEnlmU/kDQnawbNJAfUhtg
8wF5hN3sZnEEgoEA26EqNQnKGGlAw9SBxm+UzCP9ugYExE8+C5QJP2Bq9dGH+4NX
XSO3keK9A6uxNVlC7SSSW1CbOQkArFpmUGS8gLKBcTef09ozIYl6IkxMn6IlbAEC
EtXci8rMMiGjnJODN+V/1MviAFvaVwyQOZMbvMKZXD3uVftSzm1IBzcqUIU26DNk
OgkwtsOagA/gmlrz2IzG/lptqUFxnF+p4i52neGE5EfelcB4y5QlBSjUGoLNhIb2
nIw7lpv5ExtKR3WJf4zcglnIKPnSbEOn1Bhx3BCtjuEErGjr/TxNwybQk8Eku6Hy
fxe0+2TBo4R7eJeoqZ39rCnQdMP2QACuBbsPeOpx9hfKTbg41JtoxNyzvOHN785N
VB5UQXuESx08EnTGDGihlKIFWXgTO890VJjzpW4IwnlKFbr+YTlBq2uuT6HSWA8H
9htq8IC2/PTymKsP1t3fkwW/tgWRfzNcn4RbWLoM1iOPuvB9tCgSiDsIiJRampwK
8+xNUG5wZT77D9FqASMYZzIBsf3yAKCPpg3Y7CI47TMuvCAohMF9GSPgP4WE7eoF
DlVqT/0YBc8u+LLGzVgBuHU2thyxEGOwBMaG1ndxj/AnxeH5fr+WmgyvH4lIaoYc
Tz49T2L7b5jal34mTGPmGQmfzGhWS0cmfiqOrQwjyWdnA97ZWYcKDruo2oBLztMo
rY7x5L1eluGr+MOP1c7RZ5cs48KSGx6cBa0Gb5mCyaGfGFQ5z3U+zuJoOlqNEqLU
Og4Jxj+z+dgBaKY+xyzfhkTrWztFePeG7VZxABLavGrvwxVrWziBOOmGDsAuJieV
/rLs5JkuqsvNTOsUCQn1r0sJNFHuM2v68EiR2IvDNdjzw4gXE+093ZdOPIzRyYKr
Oc98714zQvBar1DZgKUs8Qb8JGLopYLx4e1vNQPRF9RUZmO/qsiYPu6jcy/doaql
96IeiWmYGDs279v61DX+WLpbK0nz4OSYtctnbTX4rRtCXI/3Huizrn7o5O50410j
Cc90nIc0bi8FtElXr3SNiUBAtLtbYcfZCUGurwcJZpUVDy7XKh2aohnQaCjhqjEQ
aLNdU+umuquIq9Pee8mPgP+W+6ul0er2pw73I5yIp+xBAfG4+gmY32APFEqCIFld
11CTw7ZlMISmM7j0x955B6vcezwM9BWtwG2WJjrZyN8xulGV8Jse81dYif7dDADn
2faJOVrersAtWc7svrV0VTTlMtVRvPyXMFgk3FXM2ZmJFtAUAa7zZ/MjeSfRb/ST
Gn2hmc7aSiuhnF45f/i71S2JrZr6irge5F2VfTOu9Zno2yvw6hQiIZOUPSqDSPBn
HPwIfYGt9rxBX8MpAm+5LnFlILFPSnaiC15kXWCkOzTt/08jEdPn8jumE+hkUZ5Q
Zkh8xZloggtR6k2Ti1rUAQ==
-----END ENCRYPTED PRIVATE KEY-----
    
answered by 14.08.2018 в 16:53