关于前一个笔记:对 x509v3 扩展的支持已在 PHP 5.2 中添加。同样,在 PHP5 5.2.4 之前的版本中,x509v3 扩展的值没有被解码,并且以 DER 二进制表示形式返回。因此,为了读取 v3 扩展的内容,您必须自己解析相关的 ASN.1 结构。
例如,如果需要读取 OID 为 1.3.6.1.4.1.7782.3.3 的私有扩展中的 IA5STRING 值,则可以执行以下操作
<?php
function asn1der_ia5string($str)
{
$len=strlen($str)-2;
if ($len < 0 && $len > 127) {
return false;
}
if (22 != (ord($str[$pos++]) & 0x1f) &&
ord($str[$pos++]) != $len) {
return false;
}
return substr($str, 2, $len);
}
$cert = openssl_x509_parse($pemcert);
print (asn1der_ia5string($cert['extensions']['1.3.6.1.4.1.7782.3.3'])); ?>
在较新的版本(>5.2.3)中,扩展以“可读格式”返回。例如
<?php print_r(openssl_x509_parse(...)); ?>
将导致
<?
Array
(
[name] => /C=GR/O=SOMETHING/CN=ME/
...
[extensions] => Array
(
[basicConstraints] => CA:FALSE
[keyUsage] => Digital Signature, Non Repudiation, Key Encipherment
[extendedKeyUsage] => E-mail Protection, TLS Web Client Authentication
[nsCertType] => SSL Client, S/MIME
....
?>