phpday 2025 - Call For Papers

openssl_x509_check_private_key

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

openssl_x509_check_private_keyVerifica se uma chave privada corresponde a um certificado

Descrição

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

Verifica se a chave privada informada em private_key é a que corresponde ao certificado fornecidor em certificate.

Aviso

A função não verifica se private_key é de fato uma chave privada ou não. Ela apenas compara os materiais públicos (por exemplo, expoente e módulo de uma chave RSA) e/ou parâmetros da chave (por exemplo, parâmetros EC de uma chave EC) de um par de chaves.

Isto significa, por exemplo, que uma chave pública poderia ser informada em private_key e a função poderia retornar true.

Parâmetros

certificate

O certificado.

private_key

A chave privada.

Valor Retornado

Retorna true se private_key for a chave privada que corresponde ao certificado do parâmetro certificate, ou false caso contrário.

Registro de Alterações

Versão Descrição
8.0.0 certificate agora aceita uma instância de OpenSSLCertificate; anteriormente, um resource do tipo OpenSSL X.509 era aceito.
8.0.0 private_key agora aceita uma instância de OpenSSLAsymmetricKey ou OpenSSLCertificate; anteriormente, um resource do tipo OpenSSL key ou OpenSSL X.509 era aceito.
adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
7
tomsie at toms dot ie
7 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