我使用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实现创建这个密钥?
BEGIN RSA PRIVATE KEY
,但在 PHP 7.0.4 上运行,我得到BEGIN PRIVATE KEY
。这可能也与它所编译的 OpenSSL 版本有关。 - miken32openssl rsa -in myKey.pem -check
会显示“RSA密钥ok”,然后将其转换为您期望看到的内容。文档具有误导性,因为它表明您正在执行的操作应该导致RSA密钥(在两端的注释中明显可见)。 - scrowler