2024 年 PHP Conference Japan

openssl_x509_read

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

openssl_x509_read解析 X.509 憑證並傳回其物件

說明

openssl_x509_read(OpenSSLCertificate|字串 $certificate): OpenSSLCertificate|false

openssl_x509_read() 解析由 certificate 提供的憑證,並傳回一個 OpenSSLCertificate 物件。

參數

certificate

X509 憑證。請參閱 金鑰/憑證參數 以取得有效值的列表。

傳回值

成功時返回 OpenSSLCertificate 物件,失敗時返回 false

更新日誌

版本 說明
8.0.0 成功時,此函數現在返回一個 OpenSSLCertificate 實例;先前返回的是類型為 OpenSSL X.509資源
8.0.0 certificate 參數現在接受 OpenSSLCertificate 實例;先前接受的是類型為 OpenSSL X.509資源
新增筆記

使用者貢獻的筆記 3 則筆記

marc theat nwd thedot mx
13 年前
要取得有效日期範圍的真正時間戳記整數值,您可以使用以下方法

<?php
$data
= openssl_x509_parse(file_get_contents('/path/to/cert.crt'));

$validFrom = date('Y-m-d H:i:s', $data['validFrom_time_t']);
$validTo = date('Y-m-d H:i:s', $data['validTo_time_t']);

echo
$validFrom . "\n";
echo
$validTo . "\n";

?>
匿名
21 年前
經過一些測試,我已經能夠用這種方式得到一些結果…

<?php

$fp
= fopen("/etc/httpd/conf/ssl/moncertif.crt", "r");
$cert = fread($fp, 8192);
fclose($fp);

echo
"讀取<br>";
echo
openssl_x509_read($cert);
echo
"<br>";
echo
"*********************";
echo
"<br>";
echo
"解析<br>";
print_r(openssl_x509_parse($cert));
/*
// 或者
print_r(openssl_x509_parse( openssl_x509_read($cert) ) );
*/

?>

享受
;)
anthony dot whitehead at rfv dot sfa dot se
21 年前
透過啟用 SSL 的 iPlanet(Netscape Enterprise 或 Sun ONE)網路伺服器從用戶端憑證中取得資料的簡短教學。

當用戶端使用憑證進行驗證時,iPlanet 伺服器會設定 $_SERVER["CLIENT_CERT"]。此變數包含用戶端提供的憑證的編碼表示。這本身對腳本或應用程式來說沒有用處,我們需要從編碼中提取實際資訊。幸運的是,該編碼幾乎是一種標準的 PEM 編碼,可以被 openssl_x509_read() 函數讀取。標準的 PEM 檔案具有一個起始行、一個結束行,中間是憑證 DER 表示的 base64 編碼。PEM 要求每 64 個字元就有一個換行符,而我們的 CLIENT_CERT 變數已經符合這個要求。由於某些原因,iPlanet 伺服器忽略了附加起始和結束標頭,只需替換這些標頭即可存取憑證。以下是一個簡短的程式碼片段,用於執行此操作並印出原始憑證資料。

<?php
$beginpem
= "-----BEGIN CERTIFICATE-----\n";
$endpem = "-----END CERTIFICATE-----\n";

// 遞迴印出資料的小函數。
function print_element($item, $key)
{
if(
is_array( $item ) )
{
echo
"$key 是陣列:\n";
array_walk( $item, 'print_element' );
echo
"$key 完成\n";
}
else
echo
"$key = $item\n";
}

// 建立 PEM 字串。
$pemdata = $beginpem.$_SERVER["CLIENT_CERT"]."\n".$endpem;

// 從 PEM 字串取得憑證資源。
$cert = openssl_x509_read( $pemdata );

// 解析資源並印出內容。
$cert_data = openssl_x509_parse( $cert );
array_walk( $cert_data, 'print_element' );

// 釋放資源
openssl_x509_free( $cert );
?>
To Top