8

公開鍵を生成し、関数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']);

なにが問題ですか?

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

5 に答える 5

5

PHP + OpenSSLで与えたのと同じ答え: エラーが返されましたが、正しい結果: これは明らかに、公開鍵自体ではなく、公開鍵を含む証明書を必要とするopenssl_pkey_get_public()が原因です – 公開鍵をロードしているように見えますが、それでもこのエラーが発生します。詳細はそちらをご覧ください。

于 2010-09-08T18:03:38.070 に答える
2

phpseclib の Crypt_RSA を使用すると、より簡単に作業できる場合があります。例えば。

createKey(2048)); $publickey をエコーし​​ます。?>

より詳しい情報:

http://phpseclib.sourceforge.net/

于 2010-09-01T18:58:35.570 に答える
1

ほとんどの場合、PHP の openSSL は PEM 形式のキーを拒否します。代わりに RSA フォームを試す

于 2012-10-31T17:39:01.940 に答える
0

理由:

このエラーは通常、.crt ファイルの先頭にある 1 つの破損した文字が原因で発生します。そのため、SSL 証明書ファイル (.crt) または SSL キーに余分なスペース、余分な文字、余分な行などがある可能性があります。

于 2010-09-01T11:15:05.593 に答える
0

投稿されたコードは (PHP 5.2.6 および OpenSSL 0.9.8g で) 正常に動作するため、これは PHP または OpenSSL のいずれかのバージョンのバグであると思われます。

于 2010-09-02T12:32:47.060 に答える