2017-02-20 112 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