国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP利用Socket獲取網(wǎng)站的SSL證書與公鑰

2024-05-04 23:58:06
字體:
供稿:網(wǎng)友

通過 php/183555.html">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;

驗證證書中的公鑰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 還有一個用途是當(dāng)知道服務(wù)器 IP 時,能獲取到服務(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 的站點,如果使用了 HTTPS 同時又希望使用自有域名,是否需要將自己的私鑰提供給 CDN 廠商呢?實際上證書路徑與使用者名稱(支持 https 的域名)并不需要一致。

也就是使用自有域名并進(jìn)行 CDN 加速時不需要使用自有的 ssl 證書,只需將自己的 CDN 域名加到廠商證書的域名列表即可。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 原平市| 吴桥县| 吉安市| 淮安市| 慈利县| 保定市| 西充县| 菏泽市| 石景山区| 定西市| 宁陵县| 马公市| 原阳县| 茶陵县| 淮滨县| 二连浩特市| 湛江市| 绥宁县| 涿鹿县| 纳雍县| 丹东市| 南平市| 安乡县| 抚顺市| 台北市| 陆川县| 修文县| 离岛区| 华池县| 佛山市| 阳泉市| 嘉鱼县| 左权县| 昌平区| 德阳市| 柳州市| 博爱县| 巧家县| 化隆| 会昌县| 彝良县|