2017-02-20 165 views
0

BadSSL表示此Url https://revoked.badssl.com/具有SSL吊销证书。为什么它撤销了SSL证书?

在PHP中,从SSL证书到期日期设置为2019-09-11 12:00:00

$url = "https://revoked.badssl.com/"; 

$orignal_parse = parse_url($url, PHP_URL_HOST); 
$get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE))); 
$read = stream_socket_client("ssl://".$orignal_parse.":443", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $get); 
$cert = stream_context_get_params($read); 
$certinfo = openssl_x509_parse($cert['options']['ssl']['peer_certificate']); 
$validFrom = date('Y-m-d H:i:s', $certinfo['validFrom_time_t']); 
$validTo = date('Y-m-d H:i:s', $certinfo['validTo_time_t']); 
$current = date('Y-m-d H:i:s', time()); 


$validFrom = 2016-09-02 00:00:00 
$validTo = 2019-09-11 12:00:00 
$current = 2017-02-20 19:00:00 

$validFrom > $current : False

$validTo < $current : False

我认为,证书如果$validFrom > $current OR $validTo < $current撤销。情况并非如此。

我可以用PHP & cURL库来扣除,这是不可能检查证书吊销。如果证书被所有者破坏和撤销,您将永远不会知道它。这是对的吗?

+0

证书可以在过期之外被撤销,否? – Bytewave

+0

是的!如@pedrofb所示,已撤销!=已过期。 – LeMoussel

回答

0

证书无效/撤销,如果$ validFrom> $当前或$ validTo < $当前

你描述的既不是撤销也不无效过期。 如果签名与证书不匹配,则证书无效(等等)。如果证书颁发机构明确吊销证书,它将被吊销。

通过查看证书无法看出撤销状态,因为吊销证书不会改变它(不可能:它已经是公开的)。相反,需要使用Online Certificate Status Protocol (OCSP)来查询状态或下载Certificate Revocation List (CRL)并根据此列表检查证书。

+0

我使用PHP&cURL库更新了我的帖子,因此无法检查证书吊销。如果证书被所有者破坏和撤销,您将永远不会知道它。 – LeMoussel

+0

@LeMoussel:看起来像CRL检查可以完成,虽然你需要特殊的库,请参阅http://phpseclib.sourceforge.net/x509/compare.html#certrevoked。 OCSP看起来更糟,并且对于OCSP的支持在Python或Ruby等许多语言中确实非常糟糕(在这种情况下Perl更好)。其中一个原因是,在OpenSSL 1.1.0之前,OpenSSL中没有官方API。 –

0

撤销!=过期

证书已过期时validTo < currentDate。证书颁发机构吊销的证书意味着该证书不得在任何电子程序中被接受。

虽然可以自动检查证书有效期,但撤销证书是手动操作,例如因为持有人的数据已更改或证书已被盗用。

证书颁发机构发布可使用CRL或OCSP请求在线检查的撤销证书列表。通常,认证包括CRL/OCSP URL。

更新

审查PHP &卷曲库后,似乎没有支持。所以恐怕你不能轻易解决你的问题

由@StephenUlrich提出的库可能是一个选项,但具有的缺点是CRL URL不能从证书中提取,所以你需要知道什么URL用于每种证书。并非某些CA只发布OCSP

+0

如果证书已过期,是否有效? – LeMoussel

+0

一般而言,过期证书不能被认为在电子过程中有效:认证,数字签名等。但是,如果证书已过期,则使用时间戳保护的数字签名仍然有效。将此规则应用于撤销证书 – pedrofb