2015-09-15 7 views
0

У меня есть код, который делает преобразование, но нужно делать это с родными функциями PHP, потому что она не будет активирована поддержка выполняющийся:Загрузите .key файл формата DER в PEM с PHP

exec("openssl pkcs8 -inform DER -in 'archivo.key' -out 'archivo.key.pem' -passin pass:'lacontrasena'"); 

Someone может помочь мне перевести это в собственные PHP-функции? Это может быть openssl или библиотека.

// Обновленный

Это мой код, используя der2pem функцию:

function der2pem($der_data) { 
    $pem = chunk_split(base64_encode($der_data), 64, "\n"); 
    $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n"; 
    return $pem; 
} 
$keyfile = 'myFileDER.key'; 
$keyFileContent = file_get_contents($keyfile); 
$pemContent = der2pem($keyFileContent); 
file_put_contents('llavetemp.pem', $pemContent); 

$private_key1 = openssl_pkey_get_private($pemContent); 

var_dump($private_key1); 

var_dump возвращение булево ложные

+0

Не совсем уверен в вашей проблеме. PHP имеет это легкодоступное в своей документации: http://php.net/manual/en/book.openssl.php – Signus

+0

Чтобы использовать: "exec (" openssl pkcs8 -inform DER -in 'archivo.key' -out 'archivo.key.pem' -passin pass: 'lacontrasena'); " к php openssl native. – Nestor

ответ

0

См dan's комментарий php.net:

Используйте следующую код для конвертации из DER в PEM и PEM в DER.

<?php 
$pem_data = file_get_contents($cert_path.$pem_file); 
$pem2der = pem2der($pem_data); 

$der_data = file_get_contents($cert_path.$der_file); 
$der2pem = der2pem($der_data); 

function pem2der($pem_data) { 
    $begin = "CERTIFICATE-----"; 
    $end = "-----END"; 
    $pem_data = substr($pem_data, strpos($pem_data, $begin)+strlen($begin)); 
    $pem_data = substr($pem_data, 0, strpos($pem_data, $end)); 
    $der = base64_decode($pem_data); 
    return $der; 
} 

function der2pem($der_data) { 
    $pem = chunk_split(base64_encode($der_data), 64, "\n"); 
    $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n"; 
    return $pem; 
} 
+0

Мне нужно преобразовать файл ключа, это не сертификат, поэтому я поместил ранее использованный код ссылки, который генерирует файл PEM, который начинается с ----- BEGIN PRIVATE KEY ----- – Nestor

1

Вы можете легко использовать ответ uri2x и в несколько информации от первого результата Google. PEM - это только кодированная base64 форма двоичного файла DER. Некоторые метаданные добавляются, и вы можете делать все с этим.

так что если вы измените функцию (отправленный uri2x!) На следующее:

function der2pem($der_data, $type='CERTIFICATE') { 
    $pem = chunk_split(base64_encode($der_data), 64, "\n"); 
    $pem = "-----BEGIN ".$type."-----\n".$pem."-----END ".$type."-----\n"; 
    return $pem; 
} 

теперь вы можете назвать это:

$private_key=file_get_contents('archivo.key'); 
file_put_contents('archivo.key.pem',der2pem($private_key,'PRIVATE KEY'); 

и вы можете преобразовать почти все, что нужно, чтобы пчелы переданы в крипто-проблем:

//certificates 
$private_key=file_get_contents('certificate'); 
echo der2pem($private_key,'CERTIFICATE');//here, certificate isn't even required because it's the default 
//GPG/PGP Public Keys 
$pgp_public_key=file_get_contents('pgp_public_key'); 
echo der2pem($private_key,'PGP PUBLIC KEY BLOCK'); 
//CSR 
$certificate_signing_request=file_get_contents('csr'); 
echo der2pem($private_key,'CERTIFICATE REQUEST'); 

... и many другие!

+0

Когда я пытаюсь использовать полученный результат по следующей функции: $ private_key1 = openssl_pkey_get_private ($ pemContent); var_dump ($ private_key1); // Return boolean false – Nestor

+0

Ну, я просто исправил небольшую ошибку - повторите попытку. Обязательно назвать эту функцию «ЧАСТНЫМ КЛЮЧОМ» в качестве второго параметра! – tillz