Я сгенерировал ключ 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?
Итак, это два разных типа ключа. Вы ищете 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"];
?>
Других решений пока нет …