Php openssl\u check\u purpose()是否检查吊销?

Php openssl\u check\u purpose()是否检查吊销?,php,openssl,x509,Php,Openssl,X509,当使用(正确指定的)$cainfo变量进行检查时,PHP的openssl_check_purpose()函数在确定有效性时是否考虑了撤销?API的文档有点缺乏,将验证过程视为非专家的“黑盒子” 如果是,失败的条件是否被视为可以通过调用openssl_error_string检索的错误,或者我是否必须执行其他操作来找出其无效的原因 如果没有,是否有一个我缺少的函数可以让我从“bundle”文件中提取有问题的证书,这样我就可以从中获取CRL并手动检查 (根据公认的答案,C#中的签入确实包括撤销,但我

当使用(正确指定的)$cainfo变量进行检查时,PHP的openssl_check_purpose()函数在确定有效性时是否考虑了撤销?API的文档有点缺乏,将验证过程视为非专家的“黑盒子”

如果是,失败的条件是否被视为可以通过调用openssl_error_string检索的错误,或者我是否必须执行其他操作来找出其无效的原因

如果没有,是否有一个我缺少的函数可以让我从“bundle”文件中提取有问题的证书,这样我就可以从中获取CRL并手动检查

(根据公认的答案,C#中的签入确实包括撤销,但我学会了在PHP中不要将任何事情视为理所当然。)

更新:

在一些手动测试之后,openssl_check_purpose()似乎不会检查吊销。我怀疑部分原因可能是因为我正在测试本地的demoCA,而ca证书不包含任何CRL信息

测试代码:

$pemfile = "/home/dev/cert1.pem"; //"Good" certificate
$revfile = "/home/dev/cert2.pem"; //"Revoked" certificate
$cafile = "/home/dev/local-ca.crt";
$error = null;
$pemcansign = openssl_x509_checkpurpose(
     openssl_x509_read(file_get_contents($pemfile)),
     X509_PURPOSE_SMIME_SIGN,array($cafile));
if ($error = openssl_error_string()){
    echo "SSL Error At 22: ".$error."\n";
}

$revcansign = openssl_x509_checkpurpose(
     openssl_x509_read(file_get_contents($revfile)),
     X509_PURPOSE_SMIME_SIGN,array($cafile));
if ($error = openssl_error_string()){
     echo "SSL Error At 22: ".$error."\n";
}

echo "PEM Key can " . 
      ($pemcansign === true ?"":"NOT ") .
      "be used for signing S/MIME  (Result: $pemcansign)\n";
echo "Revoked PEM Key can " . 
      ($revcansign === true ?"":"NOT ") .
      "be used for signing S/MIME (Result: $revcansign)\n";
仍然会导致输出:

PEM Key can be used for signing S/MIME (Result: 1)
Revoked PEM Key can be used for signing S/MIME (Result: 1)
更新2:

经过更多的测试后,似乎连OpenSSL都不会自动检查吊销列表。

因此所有证据都指向“否”,而且OpenSSL_*API中似乎没有独立的函数来处理它。只要exec()未被禁用,您通常可以从客户端证书获取CRL的URI(根据经验,FSVO“通常”限于GoDaddy和StartSSL.YMMV的证书),然后调用openssl CLI并获取结果

虽然不太理想,但花了一周的时间研究它,除了编写一个新的PHP扩展之外,还没有其他方法