掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
現(xiàn)在https的使用是大勢所趨,不同的平臺越來越重視https因?yàn)閔ttps更加安全。比如百度等搜索引擎對https更加友好,小程序和app強(qiáng)制要求https,瀏覽器會把非https標(biāo)記為“不安全”。
而不管免費(fèi)的安全證書還是收費(fèi)的安全證書,都有一個期限,一般簽發(fā)一次是一年內(nèi)的有效期,有的免費(fèi)安全證書甚至只有幾個月的有效期。需要過期前進(jìn)行續(xù)簽或者更換ssl證書才能保障服務(wù)的正常運(yùn)行,而一旦https訪問不可用,對很多項(xiàng)目都是非常嚴(yán)重的訪問故障,就會出現(xiàn)下面這樣的情況,這顯然是大家都不像看到的。
不管是人工續(xù)簽,還是使用程序自動續(xù)簽,我們都的知道一個前提信息,那就是ssl證書的有效期。當(dāng)然我們可以在首次簽發(fā)或上次續(xù)簽的時候知道ssl證書的過期時間。
但不可能用腦子記,還是記錄下來,都需要人工不停記著這回事。對于這樣的事項(xiàng),相比計(jì)算機(jī)程序,人工是極其不靠譜的,比如比較忙的時候就很可能把這個事情給忘記了,特別是非專業(yè)人士。
于是我們就有一個需求:系統(tǒng)能夠自動監(jiān)測ssl證書過期時間,如果有效期在若干天內(nèi)(如15天),系統(tǒng)能夠自動提醒網(wǎng)站運(yùn)維人員或者自動續(xù)簽ssl證書的系統(tǒng)執(zhí)行相關(guān)操作。
這個需求,其實(shí)已經(jīng)被整合到即將上線的“微構(gòu)服務(wù)”系統(tǒng)中的網(wǎng)站巡查模塊中關(guān)于ssl證書的功能之一。要實(shí)現(xiàn)這個功能,就得讓程序能夠獲取到證書的有效時間。下面我們分享一段小程序用于獲取ssl安全證書的一些對上面需求有價值的信息:
$context = stream_context_create( ['ssl' => [ 'capture_peer_cert' => true, 'capture_peer_cert_chain' => true, ], ]); $host='m.askgenny.com'; $url='ssl://'.$host.':443'; $client = @stream_socket_client($url, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context); $params = stream_context_get_params($client); $cert = $params['options']['ssl']['peer_certificate']; $cert_info = openssl_x509_parse($cert); print_r($cert_info);
通過上述小程序段我們可以獲取到ssl證書的有效期validTo_time_t參數(shù)值(時間戳),該參數(shù)值就是當(dāng)前網(wǎng)站ssl證書的過期時間。除此之外還包括該ssl證書的其它信息,有了這些信息我們就可以判斷當(dāng)前網(wǎng)站的ssl證書是否有效,距離有效期還有多久,等等。
至此,就可以獲取到我們想要的信息,這樣我們就可以在過期前及時更換ssl證書,或者對原來的ssl證書進(jìn)行續(xù)期,避免出現(xiàn)因ssl證書問題影響網(wǎng)站的運(yùn)行。
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流