Openssl x509 check private key: примеры (PHP)
openssl_x509_check_private_key(OpenSSLCertificate|string $certificate, OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key): boolФункция openssl_x509_check_private_key в PHP выполняет проверку соответствия закрытого ключа сертификату X.509. Она используется при работе с криптографией, когда требуется убедиться, что конкретный приватный ключ соответствует открытому ключу, содержащемуся в сертификате.
Такая проверка важна для корректной настройки SSL/TLS серверов, создания подписей и шифрования данных, где требуется гарантия принадлежности ключей одному владельцу.
- certificate - принимает строку с PEM-кодированным сертификатом или ресурс типа OpenSSLCertificate (в PHP 8.0+).
- private_key - принимает строку с PEM-кодированным приватным ключом или ресурс типа OpenSSLAsymmetricKey (в PHP 8.0+).
Функция возвращает логическое значение true при соответствии ключа сертификату, и false при несоответствии или возникновении ошибки.
$cert = "-----BEGIN CERTIFICATE-----
...сертификат...
-----END CERTIFICATE-----";
$key = "-----BEGIN PRIVATE KEY-----
...ключ...
-----END PRIVATE KEY-----";
$result = openssl_x509_check_private_key($cert, $key);
echo 'Соответствие: ' . ($result ? 'да' : 'нет');Соответствие: да
$cert = openssl_csr_sign(openssl_csr_new(['CN' => 'test'], $privKey1), null, $privKey2, 365);
$result = openssl_x509_check_private_key($cert, $privKey3);
var_dump($result);bool(false)
В PHP существует несколько функций для работы с сертификатами и ключами:
- openssl_private_encrypt/openssl_public_decrypt - прямое шифрование и расшифровка для проверки соответствия через операции с данными
- openssl_x509_parse - извлечение информации из сертификата без проверки ключа
- openssl_pkey_get_private/openssl_pkey_get_public - получение ресурсов ключей для ручного сравнения параметров
Функция openssl_x509_check_private_key является специализированной для проверки соответствия, тогда как другие функции требуют больше шагов для аналогичной проверки.
$cert = 'некорректный сертификат';
$key = 'некорректный ключ';
$result = openssl_x509_check_private_key($cert, $key);
var_dump($result);bool(false)
// В PHP 8.0+ устаревшие ресурсы вызывают предупреждение
$cert = openssl_x509_read($pemCert); // возвращает OpenSSLCertificate
$key = openssl_pkey_get_private($pemKey); // возвращает OpenSSLAsymmetricKey
$result = openssl_x509_check_private_key($cert, $key);В новых версиях PHP используется объектно-ориентированный подход вместо ресурсов.
В PHP 8.0 произошли значительные изменения типов параметров. Аргументы certificate и private_key теперь принимают объекты OpenSSLCertificate и OpenSSLAsymmetricKey соответственно, вместо ресурсов.
В PHP 8.1 добавлена более строгая типизация, функция теперь вызывает TypeError при передаче неверных типов аргументов.
Обновления в PHP 8.2 улучшили обработку ошибок для поврежденных ключей и сертификатов.
$encryptedKey = openssl_pkey_get_private($pemEncryptedKey, 'пароль');
$cert = openssl_x509_read($pemCert);
$result = openssl_x509_check_private_key($cert, $encryptedKey);
// Перед проверкой ключ должен быть расшифрован$pairs = [
['cert' => $cert1, 'key' => $key1],
['cert' => $cert2, 'key' => $key2]
];
foreach ($pairs as $pair) {
$valid = openssl_x509_check_private_key($pair['cert'], $pair['key']);
echo 'Сертификат ' . ($valid ? 'валиден' : 'невалиден') . '\n';
}// Проверка конфигурации SSL перед запуском сервера
$cert = file_get_contents('/path/to/cert.pem');
$key = file_get_contents('/path/to/key.pem');
if (!openssl_x509_check_private_key($cert, $key)) {
throw new Exception('Несоответствие SSL сертификата и ключа');
}
// Запуск сервера с корректными SSL материаламиfrom cryptography import x509
from cryptography.hazmat.primitives import serialization
cert = x509.load_pem_x509_certificate(pem_cert.encode())
key = serialization.load_pem_private_key(pem_key.encode(), password=None)
public_key_cert = cert.public_key()
public_key_key = key.public_key()
result = public_key_cert.public_numbers() == public_key_key.public_numbers()const crypto = require('crypto');
const cert = new crypto.X509Certificate(pemCert);
const key = crypto.createPrivateKey(pemKey);
const publicKeyCert = cert.publicKey.export({type: 'spki', format: 'pem'});
const publicKeyKey = crypto.createPublicKey(key).export({type: 'spki', format: 'pem'});
const result = publicKeyCert === publicKeyKey;PHP openssl_x509_check_private_key function comments
- Php openssl x509 check private key - аргументы и возвращаемое значение
- Функция php openssl_x509_check_private_key - описание
- openssl x509 check private key - примеры
- openssl x509 check private key - похожие методы на php
- openssl_x509_check_private_key на js, python, mysql
- openssl x509 check private key изменения php
- Примеры openssl_x509_check_private_key на php