简体   繁体   English

openssl_pkey_get_public没有打开公钥,“没有起始行”错误

[英]openssl_pkey_get_public not open public key, “no start line” error

When generating public key and then reading it with function openssl_pkey_get_public - $publicKeyResource = bool(false) and message: error:0906D06C:PEM routines:PEM_read_bio:no start line 生成公钥然后用函数openssl_pkey_get_public读取它 - $ publicKeyResource = bool(false)和消息: 错误:0906D06C:PEM例程:PEM_read_bio:无起始行

$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']);

What is wrong? 怎么了?

PS PS

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)
}

Same answer as I gave in PHP + OpenSSL : error returned, but correct result : This is apparently caused by openssl_pkey_get_public() which wants a certificate containing your public key rather than the public key by itself – it seems to load the public key but still causes this error. 与我在PHP + OpenSSL中给出的答案相同:错误返回,但结果正确 :这显然是由openssl_pkey_get_public()引起的,它需要一个包含公钥而不是公钥的证书 - 它似乎加载公钥但仍然导致此错误。 See details there. 看那里的细节。

You might have an easier time with phpseclib's Crypt_RSA. 使用phpseclib的Crypt_RSA可能会更容易。 eg. 例如。

createKey(2048)); createKey(2048)); echo $publickey; echo $ publickey; ?> ?>

More info: 更多信息:

http://phpseclib.sourceforge.net/ http://phpseclib.sourceforge.net/

Most likely PHP's openSSL rejects key in PEM form. 很可能PHP的openSSL拒绝PEM形式的密钥。 Try RSA form instead 请尝试使用RSA表单

Reason: 原因:

This error is usually caused by one corrupt character at the beginning of the .crt file. 此错误通常是由.crt文件开头的一个损坏字符引起的。 So, the chances are that you have an extra space, an extra character, an extra line, etc. in either the SSL Certificate file (.crt) or the SSL key. 因此,您可能在SSL证书文件(.crt)或SSL密钥中有额外的空间,额外的字符,额外的行等。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM