8

生成公钥然后使用函数openssl_pkey_get_public - $publicKeyResource = bool(false) 和消息读取它时: error:0906D06C:PEMroutines:PEM_read_bio:no start line

$privateKey = openssl_pkey_new(array('private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA));

$keyDetails = openssl_pkey_get_details($privateKey);

$publicKeyResource = openssl_pkey_get_public($keyDetails['key']);

怎么了?

附言

privateKey = 

array(3) {
  ["bits"]=>int(2048)

  ["key"]=>
  string(451) "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApo5lpSuSQmAOXfqAmexj
IzjdGnd1X1gCKj5ko2DHgcR4XBlj1hbFNs1pzXx+R/UvLXTeF7dNQ+9AgXjEeRa6
71VbNxrUgvb/PHjEANwce7xBsnbu+dcSazyNHzx4ahWyEF4f3HyaJkGrT/Dgzcut
DO+yFAH9u8Hx26cj/8kyrtIHxazemnD+IDHRa3zOjKDmTfoDRKtOMTPVgFAsYBXn
tKcLyamCSBgpwfQwKfUUcYhfY1xD9UMhVXabSSiNQOiTMuOIZUHueO8UCp/tdK6a
LprUDBQ/tVmiV7ZMeZYMjh6XnK7higJ3WZp8RmD4PPeKbtG6j2AuGpbF/ddzD62T
XwIDAQAB
-----END PUBLIC KEY-----
"

  ["type"]=>
  int(0)
}
4

5 回答 5

5

与我在PHP + OpenSSL中给出的答案相同:返回错误,但结果正确:这显然是由openssl_pkey_get_public()引起的,它想要一个包含您的公钥而不是公钥本身的证书 - 它似乎加载了公钥但仍然导致此错误。在那里查看详细信息。

于 2010-09-08T18:03:38.070 回答
2

使用 phpseclib 的 Crypt_RSA 可能会更轻松一些。例如。

创建密钥(2048));回声$公钥;?>

更多信息:

http://phpseclib.sourceforge.net/

于 2010-09-01T18:58:35.570 回答
1

很可能 PHP 的 openSSL 拒绝 PEM 形式的密钥。改用 RSA 表格

于 2012-10-31T17:39:01.940 回答
0

原因:

此错误通常是由 .crt 文件开头的一个损坏字符引起的。因此,您的 SSL 证书文件 (.crt) 或 SSL 密钥中可能有额外的空格、额外的字符、额外的行等。

于 2010-09-01T11:15:05.593 回答
0

我怀疑这一定是 PHP 或 OpenSSL 的某些版本中的错误,因为您发布的代码对我来说很好(使用 PHP 5.2.6 和 OpenSSL 0.9.8g)。

于 2010-09-02T12:32:47.060 回答