PHP Conference Nagoya 2025

openssl_x509_checkpurpose

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

openssl_x509_checkpurpose Überprüft, ob ein Zertifikat für einen bestimmten Zweck verwendet werden kann

Beschreibung

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

openssl_x509_checkpurpose() überprüft ein Zertifikat, um festzustellen, ob es für den in purpose angegebenen Zweck eingesetzt werden kann.

Parameter-Liste

certificate

Das zu prüfende Zertifikat.

purpose

openssl_x509_checkpurpose()-Verwendungszwecke
Konstante Beschreibung
X509_PURPOSE_SSL_CLIENT Kann das Zertifikat für die Clientseite einer SSL-Verbindung verwendet werden?
X509_PURPOSE_SSL_SERVER Kann das Zertifikat für die Serverseite einer SSL-Verbindung verwendet werden?
X509_PURPOSE_NS_SSL_SERVER Kann das Zertifikat für den Netscape SSL-Server verwendet werden?
X509_PURPOSE_SMIME_SIGN Kann das Zertifikat zum Signieren einer S/MIME-E-Mail verwendet werden?
X509_PURPOSE_SMIME_ENCRYPT Kann das Zertifikat zum Verschlüsseln einer S/MIME-E-Mail verwendet werden?
X509_PURPOSE_CRL_SIGN Kann das Zertifikat zum Signieren einer Zertifikats-Widerrufliste (CRL) verwendet werden?
X509_PURPOSE_ANY Kann das Zertifikat für beliebige/alle Zwecke verwendet werden?
Diese Optionen sind keine Bitfelder, nur eine kann angegeben werden!

ca_info

ca_info sollte ein Array von vertrauenswürdigen CA-Dateien/-Verzeichnissen sein, wie in Überprüfung von Zertifikaten beschrieben.

untrusted_certificates_file

Wenn angegeben, sollte dies der Name einer PEM-kodierten Datei sein, die Zertifikate enthält, die bei der Prüfung des Zertifikats helfen können. Die Zertifikate aus dieser Datei werden als nicht vertrauenswürdig erachtet.

Rückgabewerte

Gibt true zurück, falls das Zertifikat für den angegebenen Zweck verwendet werden kann, false, falls nicht, und -1 im Falle eines Fehlers.

Changelog

Version Beschreibung
8.0.0 certificate akzeptiert nun eine OpenSSLCertificate-Instanz; vorher wurde eine Ressource vom Typ OpenSSL X.509 akzeptiert.
8.0.0 untrusted_certificates_file ist nun ein Nullable-Typ.
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