openssl_x509_checkpurpose
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
openssl_x509_checkpurpose — 証明書が特定の目的に使用可能かどうか確認する
説明
openssl_x509_checkpurpose(
OpenSSLCertificate|string
int
array
?string
): bool|int
OpenSSLCertificate|string
$certificate
,int
$purpose
,array
$ca_info
= [],?string
$untrusted_certificates_file
= null
): bool|int
openssl_x509_checkpurpose() は証明書を調べ、
purpose
で指定した目的に使用可能であるかどうかを確認します。
パラメータ
certificate
-
調べたい証明書。
purpose
-
openssl_x509_checkpurpose() の目的 定数 説明 X509_PURPOSE_SSL_CLIENT この証明書を SSL 接続のクライアント側で使用できるか? X509_PURPOSE_SSL_SERVER この証明書を SSL 接続のサーバー側で使用できるか? X509_PURPOSE_NS_SSL_SERVER この証明書を Netscape SSL サーバーで使用できるか? X509_PURPOSE_SMIME_SIGN この証明書を S/MIME email で使用できるか? X509_PURPOSE_SMIME_ENCRYPT この証明書を S/MIME email の暗号化で使用できるか? X509_PURPOSE_CRL_SIGN この証明書を証明書取消リスト(CRL)にサインをする際に使用できるか? X509_PURPOSE_ANY この証明書をあらゆる用途に使用できるか? ca_info
-
ca_info
は、証明書の認証 で説明したような信頼できる CA ファイル/ディレクトリの配列です。 untrusted_certificates_file
-
指定した場合は、これが証明書を含むPEMエンコードされたファイルの名前になります。 この証明書は、検証と証明を簡単化するために使用されます。 そのファイル内にある証明書は、信頼されない(untrusted)証明書とみなされます。
変更履歴
バージョン | 説明 |
---|---|
8.0.0 |
certificate は、
OpenSSLCertificate クラスのインスタンスを受け入れるようになりました。
これより前のバージョンでは、
OpenSSL X.509 型のリソースを受け入れていました。
|
8.0.0 |
untrusted_certificates_file は、nullable になりました。
|
+add a note
User Contributed Notes 2 notes
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.
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";
}
?>