簡體   English   中英

從使用 PHP 密碼保護的 DER 格式 (PKCS8) 文件中獲取私鑰

[英]Get private key from a file with DER format (PKCS8) protected with passwordin PHP

這是我試圖找到解決方案但沒有成功的新問題。

這是我的需要。 用戶將用一堆數據填寫一個表單,並在同一個表單中上傳 2 個文件,並為其中一個文件輸入密碼。

  • 一個文件具有 DER 格式 (PKCS8) 的私鑰,並使用密碼(用戶將輸入的密碼)進行保護。

  • 另一個文件具有 DER 格式 (PKCS8) 的公鑰,沒有密碼。

使用此文件中的密鑰 a 將對用戶在表單中鍵入的數據進行簽名,並生成/下載帶有簽名的 xml 文件。

我知道使用openssl這需要采用 PEM 格式,並使用命令

“openssl pkcs8 -inform DER private.key -out private.key.pem -passin pass:password”

我可以將文件轉換為這種格式。 但我有一個限制:

我知道我可以使用一個函數輕松地將 DER 格式轉換為 PEM(我已經用公鑰的文件做到了這一點),但問題在於其中包含密碼的私鑰。

出於安全原因,我無法調用 exec 函數來執行此操作,並且出於同樣的原因,我不想以 pem 格式存儲文件。

有沒有一種方法(php 庫、代碼等)可以在不使用 openssl 或保存新文件的情況下提取私鑰文件的內容? 我正在嘗試使用其他庫,如 Crypt_RSA,但我還沒有找到如何使用該庫執行該操作的示例。

任何幫助將不勝感激。

這么多年后,我再次發現自己遇到了這個問題,但現在我有了答案並且很容易:

$path_key = 'C:/Private.key';
$key_content = file_get_contents($path_key);
$pem_from_key = '-----BEGIN ENCRYPTED PRIVATE KEY-----' . PHP_EOL
        . chunk_split(base64_encode($key_content), 64, PHP_EOL)
        . '-----END ENCRYPTED PRIVATE KEY-----' . PHP_EOL;
$private_key = openssl_pkey_get_private($pem_from_key, 'password');
openssl_private_encrypt($data_to_encrypt, $encrypted_data, $private_key);

私鑰使用密碼加密/保護,因此,當您從 der 轉換為 pem 時,您必須在頁眉和頁腳中添加文本“ENCRYPTED”,否則將無法使用。 如果私鑰未加密/保護,則必須刪除頁眉和頁腳中的“ENCRYPTED”文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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