PHP Conference Nagoya 2025

openssl_x509_checkpurpose

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

openssl_x509_checkpurposeSertifikanın belli bir amaçla kulanılıp kullanılmayacağına bakar

Açıklama

openssl_x509_checkpurpose(
    OpenSSLCertificate|string $sertifika,
    int $amaç,
    array $CA_bilgisi = [],
    ?string $güvenilmez_sertifikalar_dosyası = null
): bool|int

Belirtilen sertifikanın belirtilen amaç için kullanılıp kullanılmayacağına bakar.

Bağımsız Değişkenler

sertifika

İncelenen sertifika.

amaç

openssl_x509_checkpurpose() amaçlar
Sabit Açıklama
X509_PURPOSE_SSL_CLIENT Sertifika, bir SSL bağlantısının istemci tarafı için kullanılabilir mi?
X509_PURPOSE_SSL_SERVER Sertifika, bir SSL bağlantısının sunucu tarafı için kullanılabilir mi?
X509_PURPOSE_NS_SSL_SERVER Sertifika, Netscape SSL sunucusu için kullanılabilir mi?
X509_PURPOSE_SMIME_SIGN Sertifika, S/MIME epostaları imzalamak için kullanılabilir mi?
X509_PURPOSE_SMIME_ENCRYPT Sertifika, S/MIME epostaları şifrelemek için kullanılabilir mi?
X509_PURPOSE_CRL_SIGN Sertifika, bir sertifika yürürlükten kaldırma listesi (CRL) için kullanılabilir mi?
X509_PURPOSE_ANY Sertifika, her türlü amaç için kullanılabilir mi?
Bu seçenekler bit alanları değildir, dolayısıyla sadece biri belirtilebilir!

CA_bilgisi

Sertifika Doğrulama bölümünde açıklandığı gibi güvenilir yetkili sertifika dosya ve dizinlerini içeren bir dizi olmalıdır.

güvenilmez_sertifikalar_dosyası

Belirtildiği takdirde, sertifikayı doğrulamaya yardımcı olacak sertifikaların bulunduğu PEM kodlamalı dosyanın (bu dosyadan gelen sertifikalara güvenilmez ise de) ismi olmalıdır.

Dönen Değerler

Sertifika belirtilen amaç için kullanılabiliyorsa true, kullanılamıyorsa false, bir hata oluşmuşsa -1 döner.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 sertifika artık OpenSSLCertificate örneği kabul ediyor; evvelce, OpenSSL X.509 özkaynağı kabul edilirdi.
8.0.0 güvenilmez_sertifikalar_dosyası artık null olabiliyor.
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