[英]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
開頭的RSA PRIVATE KEY
,而不僅僅是PRIVATE KEY
。 如何使用PHP和OpenSSL PHP實現創建它?
因此,這是兩種不同的密鑰類型 。 您正在尋找PKCS#1,但獲得PKCS#8。
這似乎與PHP使用的OpenSSL版本有關。 自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"];
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.