openssl_pkey_get_private

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

openssl_pkey_get_private获取私钥

说明

openssl_pkey_get_private ( mixed $key [, string $passphrase = "" ] ) : resource

openssl_get_privatekey() 解析 key 供其他函数使用。

参数

key

key 可以是如下密钥之一:

  1. 如下格式的字符串 file://path/to/file.pem。该文件必须包含 PEM 编码的证书或者私钥 (可能都包含了).
  2. 一个PEM格式的私钥。

passphrase

如果指定的密钥已被加密了(受密码保护),可选参数 passphrase 是必须要的。

返回值

成功,返回真实的密钥资源标识符,失败,返回 FALSE .

User Contributed Notes

geoff at hostfission dot com 22-Oct-2016 09:48
Since this function can be used to load a PEM encoded string also, those that are using it relying on user input should be sure to check that the passed data is indeed a PEM encoded string and not a malicious file path.

The following should be sufficient.

<?PHP
  $private
= trim($_POST['private']);
  if (
strpos($private, '-----') !== 0) return false;
?>
kristof1 at mailbox dot hu 10-May-2014 03:34
It's actually "file://key.pem" when you want to give a relative path using unix systems. It will be three '/' in case of absolute path (e.g "file:///home/username/..."). But this path consists of two '/' originated from "file://" and one '/' from the fact that home is a subfolder of the unix filesystem's root directory ("/home/username/..."). This two part will be concatenated and you will get three '/' characters following each other.

So you only have to concatenate "file://" with an existing path string in every case.
joelhy 27-Feb-2011 11:46
Please note that "file://path/to/file.pem" in documentation means file protocol + file path. In UNIX like OS, that is something like file:///rsa_private_key.pem. There is THREE slashes in the path string, not TWO.