在 PHP 中生成 RSA 私有 SSH 密钥
Generate RSA private SSH key in PHP
我已经用 PHP OpenSSL 生成了一个 SSH 密钥:
$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 和 OpenSSL PHP 实现来创建它?
所以,这些是 two different key types。您正在寻找 PKCS #1,但得到的是 PKCS #8。
这似乎与 PHP 使用的 OpenSSL 版本有关。自 1.0 以来的版本创建了一个 PKCS #8 文件,nothing the PHP developers 想要处理它。使用此命令从命令行执行此操作时会出现相同的问题:
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"];
?>
我已经用 PHP OpenSSL 生成了一个 SSH 密钥:
$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 和 OpenSSL PHP 实现来创建它?
所以,这些是 two different key types。您正在寻找 PKCS #1,但得到的是 PKCS #8。
这似乎与 PHP 使用的 OpenSSL 版本有关。自 1.0 以来的版本创建了一个 PKCS #8 文件,nothing the PHP developers 想要处理它。使用此命令从命令行执行此操作时会出现相同的问题:
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"];
?>