Генерируйте закрытый SSH-ключ RSA в переполнении стека

Я сгенерировал ключ SSH с помощью PHP OpenSSL:

$rsaKey = openssl_pkey_new(array(
'private_key_bits' => 4096,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
));
$privKey = openssl_pkey_get_private($rsaKey);
openssl_pkey_export($privKey, $pem);

Это приводит к $pem выглядит так:

-----НАЧАТЬ ЧАСТНЫЙ КЛЮЧ -----
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQC8ggt6rVHYnqNP
...
E95 + EXbPc6THyWt9pgwOsJltpylIYG4 =
----- КОНЕЦ ЧАСТНОГО КЛЮЧА -----

Но я не могу подтвердить подлинность, используя этот ключ. Прежде чем я смогу использовать его, я должен преобразовать его с помощью этой команды:

openssl rsa -in xxx.key -outform pem > xxx.key2

Результат преобразования такой:

-----НАЧАТЬ RSA ЧАСТНЫЙ КЛЮЧ -----
MIIJKQIBAAKCAgEAvIILeq1R2J6jT + xjlK5NrOqFZTOJ4PByvgPQNbb2Kp7c3W15
...
o1t2KBkaSoR + JyOPOZakq5BLv8lgD3vefhF2z3Okx8lrfaYMDrCZbacpSGBu
----- КОНЕЦ RSA ЧАСТНЫЙ КЛЮЧ -----

Оба формата PEM, но второй — закрытый ключ RSA. Со вторым PHP может войти в систему. Поэтому мне нужен ключ, который начинается с RSA PRIVATE KEY, не просто PRIVATE KEY, Как я могу создать это с помощью PHP и реализации OpenSSL PHP?

3

Решение

Итак, это два разных типа ключа. Вы ищете PKCS # 1, но получаете PKCS # 8.

Похоже, это связано с версией OpenSSL, которую использует PHP. Версии с 1.0 создают файл PKCS # 8, и есть ничего разработчики PHP хочу с этим поделать. Та же проблема возникает при выполнении из командной строки с этой командой:

openssl req -new -keyout mykey.key -out mycertreq.csr -nodes -sha1 -newkey rsa:2048

Вы можете попробовать использовать внешнюю библиотеку под названием phpseclib, хотя сам не пробовал

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_OPENSSH);
$result = $rsa->createKey();
echo $result["privatekey"];
?>
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]