PHP Conference Nagoya 2025

openssl_x509_checkpurpose

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

openssl_x509_checkpurposeVerifica si un certificado se puede usar para un propósito en particular

Descripción

openssl_x509_checkpurpose(
    mixed $x509cert,
    int $purpose,
    array $cainfo = array(),
    string $untrustedfile = ?
): int

openssl_x509_checkpurpose() examina un certificado para ver si se puede usar para el propósito purpose especificado.

Parámetros

x509cert

El certificado examinado.

purpose

Propósitos de openssl_x509_checkpurpose()
Constante Descripción
X509_PURPOSE_SSL_CLIENT ¿El certificado puede ser usado por el lado del cliente de una conexión SSL?
X509_PURPOSE_SSL_SERVER ¿El certificado puede ser usado por el lado del servidor de una conexión SSL?
X509_PURPOSE_NS_SSL_SERVER ¿El certificado puede ser usado por un servidor SSL Netscape?
X509_PURPOSE_SMIME_SIGN ¿Se puede usar el certificado para firmar un email S/MIME?
X509_PURPOSE_SMIME_ENCRYPT ¿Se puede usar el certificado para encriptar un email S/MIME?
X509_PURPOSE_CRL_SIGN ¿Se puede usar el certificado para firmar una Lista de Revocación de Certificado (CRL en inglés)?
X509_PURPOSE_ANY ¿Se puede usar el certificado para Cualquier/Todos los propósitos?
Estas opciones no son campos de bits - ¡sólo se puede especificar una!

cainfo

cainfo debería ser una matriz de archivos/directorios de una AC de confianza, como está descrito en Verificación de Certificados.

untrustedfile

Si se especifica debería ser el nombre de un archivo PEM codificado que contiene los certificados que se pueden usar para ayudar a verificar el certificado, aunque no se pone confianza en los certificados que vienen de ese archivo.

Valores devueltos

Devuelve true si el certificado se puede usar para el propósito previsto, false si no se puede, o -1 si se produjo un error.

add a note

User Contributed Notes 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