PHP Conference Nagoya 2025

openssl_x509_checkpurpose

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

openssl_x509_checkpurposeVerifica se um certificado pode ser usado para uma finalidade específica

Descrição

openssl_x509_checkpurpose(
    OpenSSLCertificate|string $certificate,
    int $purpose,
    array $ca_info = [],
    ?string $untrusted_certificates_file = null
): bool|int

openssl_x509_checkpurpose() examina um certificado para ver se pode ser usado para o a finalidade especificada em purpose.

Parâmetros

certificate

O certificado examinado.

purpose

openssl_x509_checkpurpose() purposes
Constante Descrição
X509_PURPOSE_SSL_CLIENT O certificado pode ser usado no lado do cliente de uma conexão SSL?
X509_PURPOSE_SSL_SERVER O certificado pode ser usado no lado do servidor de uma conexão SSL?
X509_PURPOSE_NS_SSL_SERVER O certificado pode ser usado para o servidor Netscape SSL?
X509_PURPOSE_SMIME_SIGN O certificado pode ser usado para assinar e-mail S/MIME?
X509_PURPOSE_SMIME_ENCRYPT O certificado pode ser usado para criptografar e-mails S/MIME?
X509_PURPOSE_CRL_SIGN O certificado pode ser usado para assinar uma lista de certificados revogados (CRL)?
X509_PURPOSE_ANY O certificado pode ser usado para qualquer/todos os fins?
Estas opções não são campos de bits - somente uma pode ser especificada!

ca_info

ca_info deve ser um array de arquivos/diretórios CA confiáveis como descrito em Verificação de Certificados.

untrusted_certificates_file

Se especificado, este deve ser o nome de um arquivo codificado em PEM contendo certificados que podem ser usados ​​para ajudar a verificar o certificado, embora nenhuma confiança seja colocada nos certificados provenientes desse arquivo.

Valor Retornado

Retorna true se o certificado puder ser usado para a finalidade pretendida, false se não puder, ou -1 em caso de erro.

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 untrusted_certificates_file agora pode ser nulo.
adicione uma nota

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

up
10
dingyuan at tencent dot com
4 years ago
in one word :if you set $purpose=0, you can use this function to verify certificate chain.

====================================================================

I want to verify a certificate chain. just like this:
userCert.pem => middleCert.pem => rootCert.pem

I figured that none of these openssl functions provide this function directly. And some friends have same need as me, "mikey at badpenguins dot com" even write his own code to verify certificate chain(you can see notes below openssl_verify).

and I notice a note which has '-3' likes below openssl_verify, it says "validating an X509 certificate chain in php seems to be possible with openssl_x509_checkpurpose()", and I read the source code about this function, the given constant var about $purpose (like X509_PURPOSE_SSL_CLIENT ) is 1-7, and if you set $purpose among 1-7, you cannot verify the cert chain. Set $purpose=0 can get the truly result about verify a cert chain.

and I give that '-3' note a thumb-up, now it has -2 , lol.
up
6
adr at NOSPAM dot entropymatrix dot com
11 years ago
The following is an example usage of openssl_x509_checkpurpose. It is equivalent to the openssl verify command as follows:
openssl verify -CApath $openssl_cadir -purpose sslserver $openssl_crtfile

<?php
$openssl_crtfile
='auth.combined.pem';
$openssl_cadir='./ca';

$x509_res = openssl_x509_read(file_get_contents($openssl_crtfile));
if(empty(
$x509_res)) {
echo
'x509 cert could not be read'."\n";
}
$valid = openssl_x509_checkpurpose($x509_res,X509_PURPOSE_SSL_SERVER,array($openssl_cadir));
if (
$valid === true) {
echo
'Certificate is valid for use as SSL server'."\n";
} else {
echo
'Certificate validation returned'.$valid."\n";
}
?>
To Top