我正在尝试验证一些私钥,但是php方法 openssl_pkey_get_private()始终返回 false 。 并且 openssl_error_string()返回:
错误:0906D06C:PEM例程:PEM_read_bio:无起始行
$return = openssl_pkey_get_private($path.'_priKEY.pem');
if ($return === false) {
var_dump(openssl_error_string());
}
使用从.pfx文件提取的私钥,从.p12文件提取的私钥甚至是自己生成的密钥(使用openssl)对此进行了尝试。 已经尝试使用“ RSA PRIVATE KEY”,“ ENCRYPTED PRIVATE KEY”和“ PRIVATE KEY”。没什么改变。
私人关键内容:
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0B
[......................]
Wxdadnf7MB7DicckIZTKVy1L
-----END PRIVATE KEY-----
答案 0 :(得分:2)
您似乎没有为文件路径提供正确的格式。确保它以pip install spacy-nightly
开头,后跟绝对路径或相对路径。是的,如果您选择绝对路径,则文件名的路径将类似于file://
,以三个斜杠开头。对于相对路径,它将为file:///absolute/path/to/keyfile.pem
。
根据documentation for openssl_pkey_get_private(),您可以将密钥提供为文件路径或包含实际密钥的字符串。仅当值以file://relative/path/to/keyfile.pem
开头时,它才被解释为文件的路径(URI)。否则,该值将解释为包含PEM编码键的字符串。在后一种情况下,它期望一个起始行被识别为PEM,例如file://
。这就是为什么您收到该错误消息的原因,您的参数既不能以-----BEGIN PRIVATE KEY-----
开头,也不能以PEM起始行开头。
如果您不喜欢file://
路径格式,则始终可以自己读取文件的内容,然后再将其提供给file://
,例如:
openssl_pkey_get_private()
答案 1 :(得分:0)
请参考下一个URL。
https://www.php.net/manual/en/function.openssl-pkey-get-private.php
要缩小问题范围,请对您的php文件和密钥文件使用相同目录,并尝试使用此工作代码。
工作代码
$keyfile="file://".__DIR__.DIRECTORY_SEPARATOR."key.pem"; //absolute path
$key = openssl_pkey_get_private($keyfile);
if ($key === false) {
var_dump(openssl_error_string());
}else{
var_dump($key);
}
也请参阅 Openssl and PHP