Php openssl\u check\u purpose()是否检查吊销?
当使用(正确指定的)$cainfo变量进行检查时,PHP的openssl_check_purpose()函数在确定有效性时是否考虑了撤销?API的文档有点缺乏,将验证过程视为非专家的“黑盒子” 如果是,失败的条件是否被视为可以通过调用openssl_error_string检索的错误,或者我是否必须执行其他操作来找出其无效的原因 如果没有,是否有一个我缺少的函数可以让我从“bundle”文件中提取有问题的证书,这样我就可以从中获取CRL并手动检查 (根据公认的答案,C#中的签入确实包括撤销,但我学会了在PHP中不要将任何事情视为理所当然。) 更新: 在一些手动测试之后,openssl_check_purpose()似乎不会检查吊销。我怀疑部分原因可能是因为我正在测试本地的demoCA,而ca证书不包含任何CRL信息 测试代码:Php openssl\u check\u purpose()是否检查吊销?,php,openssl,x509,Php,Openssl,X509,当使用(正确指定的)$cainfo变量进行检查时,PHP的openssl_check_purpose()函数在确定有效性时是否考虑了撤销?API的文档有点缺乏,将验证过程视为非专家的“黑盒子” 如果是,失败的条件是否被视为可以通过调用openssl_error_string检索的错误,或者我是否必须执行其他操作来找出其无效的原因 如果没有,是否有一个我缺少的函数可以让我从“bundle”文件中提取有问题的证书,这样我就可以从中获取CRL并手动检查 (根据公认的答案,C#中的签入确实包括撤销,但我
$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扩展之外,还没有其他方法