openssl_x509_read

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

openssl_x509_read解析 X.509 证书并返回其对象

描述

openssl_x509_read(OpenSSLCertificate|string $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
"Read<br>";
echo
openssl_x509_read($cert);
echo
"<br>";
echo
"*********************";
echo
"<br>";
echo
"Parse<br>";
print_r(openssl_x509_parse($cert));
/*
// or
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)Web 服务器获取客户端证书中数据的简要操作指南。

每当客户端使用证书进行身份验证时,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 is Array:\n";
array_walk( $item, 'print_element' );
echo
"$key done\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