gpt4 book ai didi

php - openssl_verify 和 "error:0906D06C:PEM routines:PEM_read_bio:no start line"

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:03 27 4
gpt4 key购买 nike

我正在尝试使用 OpenSSL 函数在 PHP 中进行 RSA 签名/验证。当我尝试使用我的公钥执行 openssl_verify 时,出现此错误:error:0906D06C:PEM routines:PEM_read_bio:no start line,但函数本身工作正常(如果消息被修改则返回 0,如果消息完好则返回 1)。 openssl_sign 工作正常。

我该如何解决?

目前,我使用由 openssl 生成的公钥:

define("SC_MSG_PUBLIC", <<<EOD
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALjPcOckMHDVLiUstcRwwx8kF5PzsiEs
rskyndWisbXMLU9BHomXwL7Qg2L91jE+sNSobkzBDF41CbwDiNlofZUCAwEAAQ==
-----END PUBLIC KEY-----
EOD
);

知道为什么会触发此错误,但一切正常吗?

试图从私钥中生成公钥,并使用它,但看起来完全一样,同样的错误信息:-S

$pkey = openssl_pkey_get_private(SC_MSG_PRIVATE);
$keyDetails = openssl_pkey_get_details($pkey);
file_put_contents('c:\publickey', $keyDetails['key']);

此外,我已经尝试安装更新版本的所有内容(PHP 5.3.1、OpenSSL 1.0.0a)——结果相同。而且,我在 Windows 上。

最佳答案

您是否尝试使用包含您的公钥而不是纯公钥的(可能是自签名的)证书调用 openssl_verify()

据我所知,一些 PHP OpenSSL 函数不能正确支持裸公钥,尽管尽管有错误但它确实正确验证似乎很奇怪。

<?php
$private = openssl_pkey_get_private(file_get_contents('private'), 'passphrase');

// This causes the "no start line" error when using a naked public key:
$public = openssl_pkey_get_public(file_get_contents('public')); // <-- this should be cert

echo openssl_error_string()."\n";

openssl_sign('Test', $sig, $private);
var_dump(openssl_verify('Test', $sig, $public));

echo openssl_error_string()."\n";
?>

在 Linux/UNIX shell(例如 bash)中将公钥转换为简单证书的示例(有关更多信息,请参阅 OpenSSL 文档或一些教程):

# Create certificate request
openssl req -new -days 3600 -key [PRIVATE-KEY-FILE] -out [REQUEST-TMP-FILE]

# Create certificate from request
RANDFILE=[RANDOM-TMP-FILE] openssl x509 -req -in [REQUEST-TMP-FILE] -signkey [PRIVATE-KEY-FILE] -out [CERTIFICATE-OUT-FILE]

这还将创建您以后可能想要删除的临时文件,即 [REQUEST-TMP-FILE][RANDOM-TMP-FILE]

PHP 示例代码可以在 http://de.php.net/manual/en/function.openssl-csr-new.php 找到.

关于php - openssl_verify 和 "error:0906D06C:PEM routines:PEM_read_bio:no start line",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3598044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com