相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
PHP利用Socket獲取網(wǎng)站的SSL證書與公鑰
通過 php curl 請求網(wǎng)頁并不能獲取到證書信息,此時需要使用 ssl socket 獲取證書內(nèi)容。下面來一起看看看詳細(xì)的介紹:
示例代碼:
// 創(chuàng)建 stream context $context = stream_context_create([ 'ssl' => [ 'capture_peer_cert' => true, 'capture_peer_cert_chain' => true, ], ]); $resource = stream_socket_client("ssl://$domain:$port", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context); $cert = stream_context_get_params($resource); $ssl = $cert['options']['ssl']; $resource = $ssl['peer_certificate']; // 網(wǎng)站證書中只有公鑰,通過 openssl_pkey_get_details 導(dǎo)出公鑰 $ret = [ 'crt' => '', 'pub' => '', ]; $pkey = openssl_pkey_get_public($resource); $ret['pub'] = openssl_pkey_get_details($pkey)['key']; openssl_x509_export($resource, $pem); $ret['crt'] = $pem; foreach ($ssl['peer_certificate_chain'] as $resource) { openssl_x509_export($resource, $pem); $ret['crt'] .= "\n" . $pem; } // 保存 $ret['crt'] 為 domain.crt // 保存 $ret['pub'] 為 domain.pub return $ret;