PHP Conference Nagoya 2025

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

Ключ.

Возвращаемые значения

Функция возвращает true, если закрытый ключ private_key — ключ, который соответствует сертификату certificate, иначе false.

Список изменений

Версия Описание
8.0.0 Параметр certificate теперь принимает экземпляр класса OpenSSLCertificate; раньше принимался ресурс (resource) с типом OpenSSL X.509.
8.0.0 Параметрprivate_key теперь принимает экземпляр класса OpenSSLAsymmetricKey или OpenSSLCertificate; раньше принимался ресурс (resource) с типом OpenSSL key или OpenSSL X.509.
Добавить

Примечания пользователей 2 notes

up
7
tomsie at toms dot ie
6 years ago
This function DOES return TRUE if the key has a passphrase, you just need to set up the data in such a way that the function can understand it. It is not documented here.

This error message led me to the solution:

PHP Warning: openssl_x509_check_private_key(): key array must be of the form array(0 => key, 1 => phrase)

So this works:

$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);
up
0
jared at enhancesoft dot com
9 years ago
This function will return FALSE if the private key requires a pass phrase.
To Top