簡體   English   中英

在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開頭的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM