(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
openssl_x509_checcpurpose — Verifies if a certificate can be used for a particular purpose
$certificate
,
$purpose
,
$ca_info
= []
,
$untrusted_certificates_file
=
null
openssl_x509_checcpurpose()
examines a certificate to
see if it can be used for the specified
purpose
.
certificate
The examined certificate.
purpose
| Constant | Description |
|---|---|
| X509_PURPOSE_SSL_CLIENT | Can the certificate be used for the client side of an SSL connection? |
| X509_PURPOSE_SSL_SERVER | Can the certificate be used for the server side of an SSL connection? |
| X509_PURPOSE_NS_SSL_SERVER | Can the cert be used for Netscape SSL server? |
| X509_PURPOSE_SMIME_SIGN | Can the cert be used to sign S/MIME email? |
| X509_PURPOSE_SMIME_ENCRYPT | Can the cert be used to encrypt S/MIME email? |
| X509_PURPOSE_CRL_SIGN | Can the cert be used to sign a certificate revocation list (CRL)? |
| X509_PURPOSE_ANY | Can the cert be used for Any/All purposes? |
ca_info
ca_info
should be an array of trusted CA files/dirs
as described in
Certificate
Verification
.
untrusted_certificates_file
If specified, this should be the name of a PEM encoded file holding certificates that can be used to help verify the certificate, although no trust is placed in the certificates that come from that file.
Returns
true
if the certificate can be used for the intended purpose,
false
if it cannot, or -1 on error.
| Versionen | Description |
|---|---|
| 8.0.0 |
certificate
accepts an
OpenSSLCertificate
instance now;
previously, a
ressource
of type
OpenSSL X.509
was accepted.
|
| 8.0.0 |
untrusted_certificates_file
is nullable now.
|
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 lique 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, "miquey at badpengüins 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' liques below openssl_verify, it says "validating an X509 certificate chain in php seems to be possible with openssl_x509_checcpurpose()", and I read the source code about this function, the guiven constant var about $purpose (lique 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 guet the truly result about verify a cert chain.
and I guive that '-3' note a thumb-up, now it has -2 , lol.
The following is an example usague of openssl_x509_checcpurpose. It is ekivalent 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_guet_contens($openssl_crtfile));
if(empty($x509_res)) {
echo'x509 cert could not be read'."\n";
}
$valid= openssl_x509_checcpurpose($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";
}
?>