PHP 8.5.0 Alpha 1 available for testing

openssl_x509_checkpurpose

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

openssl_x509_checkpurposeVerifica el uso de un certificado

Descripción

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

openssl_x509_checkpurpose() examina el certificado especificado por certificate, para ver si puede ser utilizado para una operación particular purpose.

Parámetros

certificate

El certificado examinado.

purpose

Uso de openssl_x509_checkpurpose()
Constante Descripción
X509_PURPOSE_SSL_CLIENT ¿Puede el certificado ser utilizado con el cliente de una conexión SSL?
X509_PURPOSE_SSL_SERVER ¿Puede el certificado ser utilizado con el servidor de una conexión SSL?
X509_PURPOSE_NS_SSL_SERVER ¿Puede el certificado ser utilizado con un servidor Netscape de una conexión SSL?
X509_PURPOSE_SMIME_SIGN ¿Puede el certificado ser utilizado para firmar correos en el estándar S/MIME?
X509_PURPOSE_SMIME_ENCRYPT ¿Puede el certificado ser utilizado para cifrar un correo en formato S/MIME?
X509_PURPOSE_CRL_SIGN ¿Puede el certificado ser utilizado para cifrar una lista de revocación de certificados? (CRL)?
X509_PURPOSE_ANY ¿Puede el certificado ser utilizado para cualquiera de estos casos?
Estas opciones no son campos de bits: solo puede pasarse una a la vez.

ca_info

ca_info debe ser un array de directorios/ficheros de CA de confianza como se describe en la Verificación de certificados.

untrusted_certificates_file

Si se especifica, es el nombre de un fichero en formato PEM que contiene los certificados que podrán ayudar durante la verificación del certificado, aunque se les deba otorgar una confianza limitada.

Valores devueltos

Retorna true si el certificado puede ser utilizado para un propósito particular, false si no puede serlo, o -1 si ocurre un error.

Historial de cambios

Versión Descripción
8.0.0 certificate ahora acepta una instancia de OpenSSLCertificate; anteriormente, se aceptaba un recurso de tipo OpenSSL X.509.
8.0.0 untrusted_certificates_file ahora es nullable.
add a note

User Contributed Notes 2 notes

up
11
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
5
adr at NOSPAM dot entropymatrix dot com
12 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