生成公钥然后使用函数 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']);
有什么问题?
P.S。
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)
}
答案 0 :(得分:5)
我在PHP + OpenSSL : error returned, but correct result中给出的答案相同: 这显然是由 openssl_pkey_get_public()引起的,它需要一个包含公钥而不是公钥的证书 - 它似乎加载公钥但仍然会导致此错误。 See details there.
答案 1 :(得分:3)
使用phpseclib的Crypt_RSA可能会更轻松。例如
createKey(2048)); echo $ publickey; ?>更多信息:
答案 2 :(得分:1)
很可能PHP的openSSL拒绝PEM格式的密钥。请尝试使用RSA表格
答案 3 :(得分:0)
此错误通常是由.crt文件开头的一个损坏字符引起的。因此,您可能在SSL证书文件(.crt)或SSL密钥中有额外的空格,额外的字符,额外的行等。
答案 4 :(得分:0)
我怀疑这在某些版本的PHP或OpenSSL中一定是个错误,因为你发布的代码对我来说很好(PHP 5.2.6和OpenSSL 0.9.8g)。