您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)怎么在PHP中利用Socket對(duì)網(wǎng)站的SSL證書與公鑰進(jìn)行獲取,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
示例代碼:
// 創(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;
驗(yàn)證證書中的公鑰A是否正確,通過私鑰導(dǎo)出公鑰B,比較兩者發(fā)現(xiàn)一致。
$domain = 'blog.zhengxianjun.com'; $port = '443'; // ... $pub_a = $ret['pub']; $private_key_path = '/conf/ssl/blog.zhengxianjun.com.key'; // 證書沒有設(shè)置密碼,$passphrase 為空字符串 $pkey = openssl_pkey_get_private(file_get_content($private_key_path), $passphrase = ''); $pub_b = openssl_pkey_get_details($pkey)['key']; // 兩者一致 var_dump($pub_a === $pub_b);
函數(shù) stream_socket_client 還有一個(gè)用途是當(dāng)知道服務(wù)器 IP 時(shí),能獲取到服務(wù)器可能可以使用的域名。
$resource = stream_socket_client("ssl://$ip:$port", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context); $cert = stream_context_get_params($resource); // 解析 X.509 格式證書 $info = openssl_x509_parse($cert['options']['ssl']['peer_certificate']); // 獲取證書中的可信域名列表 $domain = str_replace('DNS:', '', $info['extensions']['subjectAltName']);
以上可以看到獲取網(wǎng)站證書并不能獲得私鑰。
在一些使用 CDN 的站點(diǎn),如果使用了 HTTPS 同時(shí)又希望使用自有域名,是否需要將自己的私鑰提供給 CDN 廠商呢?實(shí)際上證書路徑與使用者名稱(支持 https 的域名)并不需要一致。
也就是使用自有域名并進(jìn)行 CDN 加速時(shí)不需要使用自有的 ssl 證書,只需將自己的 CDN 域名加到廠商證書的域名列表即可。
上述就是小編為大家分享的怎么在PHP中利用Socket對(duì)網(wǎng)站的SSL證書與公鑰進(jìn)行獲取了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。