Сгенерировать закрытый SSH-ключ RSA в PHP
Я сгенерировал 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
выглядит следующим образом:
-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQC8ggt6rVHYnqNP ... e95+EXbPc6THyWt9pgwOsJltpylIYG4= -----END PRIVATE KEY-----
Но я не могу пройти аутентификацию с помощью этого ключа. Прежде чем я смогу его использовать, я должен преобразовать его с помощью этой команды:
openssl rsa -in xxx.key -outform pem > xxx.key2
Результат преобразования таков:
-----BEGIN RSA PRIVATE KEY----- MIIJKQIBAAKCAgEAvIILeq1R2J6jT+xjlK5NrOqFZTOJ4PByvgPQNbb2Kp7c3W15 ... o1t2KBkaSoR+JyOPOZakq5BLv8lgD3vefhF2z3Okx8lrfaYMDrCZbacpSGBu -----END RSA PRIVATE KEY-----
Оба имеют формат PEM, но второй - закрытый ключ RSA. Со вторым PHP может войти в систему. Поэтому мне нужен ключ, который начинается с RSA PRIVATE KEY
, а не просто PRIVATE KEY
. Как я могу создать это с помощью PHP и Реализация PHP OpenSSL?
1 answers
Итак, это два разных типа ключей. Вы ищете 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"];
?>