PHP Conference Japan 2024

openssl_x509_check_private_key

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

openssl_x509_check_private_key检查私钥是否与证书对应

描述

openssl_x509_check_private_key(OpenSSLCertificate|string $certificate, #[\SensitiveParameter] OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key): bool

检查给定的 $private_key 是否是与 $certificate 对应的私钥。

警告

此函数不检查 $private_key 是否确实是私钥。它仅仅比较密钥对的公共材料(例如RSA密钥的指数和模数)和/或密钥参数(例如EC密钥的EC参数)。

这意味着,例如,可以为 $private_key 提供公钥,并且函数可能返回 true

参数

certificate

证书。

private_key

私钥。

返回值

如果 $private_key 是与 $certificate 对应的私钥,则返回 true,否则返回 false

变更日志

版本 描述
8.0.0 $certificate 现在接受 OpenSSLCertificate 实例;以前,它接受类型为 OpenSSL X.509资源
8.0.0 $private_key 现在接受 OpenSSLAsymmetricKeyOpenSSLCertificate 实例;以前,它接受类型为 OpenSSL keyOpenSSL X.509资源
添加备注

用户贡献的笔记 2 条笔记

tomsie at toms dot ie
7 年前
如果密钥有密码短语,此函数确实会返回 TRUE,您只需要以函数可以理解的方式设置数据即可。此处未对此进行记录。

此错误消息引导我找到了解决方案

PHP 警告:openssl_x509_check_private_key(): 密钥数组必须采用 array(0 => key, 1 => phrase) 的形式

因此,这有效

$certFile = file_get_contents('cert.crt');
$keyFile = file_get_contents('cert.key');
$keyPassphrase = "password1234";
$keyCheckData = array(0=>$keyFile,1=>$keyPassphrase);
$result = openssl_x509_check_private_key($certFile,$keyCheckData);
jared at enhancesoft dot com
9 年前
如果私钥需要密码短语,此函数将返回 FALSE。
To Top