中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在PHP中利用Socket對網站的SSL證書與公鑰進行獲取

發布時間:2020-12-22 15:43:01 來源:億速云 閱讀:220 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關怎么在PHP中利用Socket對網站的SSL證書與公鑰進行獲取,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

示例代碼:

// 創建 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'];
 
// 網站證書中只有公鑰,通過 openssl_pkey_get_details 導出公鑰
 
$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是否正確,通過私鑰導出公鑰B,比較兩者發現一致。

$domain = 'blog.zhengxianjun.com';
$port = '443';
// ...
$pub_a = $ret['pub'];
 
$private_key_path = '/conf/ssl/blog.zhengxianjun.com.key';
 
// 證書沒有設置密碼,$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);

函數 stream_socket_client 還有一個用途是當知道服務器 IP 時,能獲取到服務器可能可以使用的域名。

$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']);

以上可以看到獲取網站證書并不能獲得私鑰。

在一些使用 CDN 的站點,如果使用了 HTTPS 同時又希望使用自有域名,是否需要將自己的私鑰提供給 CDN 廠商呢?實際上證書路徑與使用者名稱(支持 https 的域名)并不需要一致。

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

上述就是小編為大家分享的怎么在PHP中利用Socket對網站的SSL證書與公鑰進行獲取了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

甘肃省| 周宁县| 望谟县| 乾安县| 抚顺市| 唐山市| 姚安县| 东平县| 绩溪县| 高台县| 靖宇县| 屯昌县| 甘南县| 儋州市| 玉树县| 定襄县| 吉水县| 邵东县| 山阳县| 镶黄旗| 周宁县| 兴化市| 靖西县| 五指山市| 琼中| 正镶白旗| 闽侯县| 襄城县| 黄石市| 兴山县| 上栗县| 杭州市| 读书| 潮安县| 沈阳市| 科技| 蓬莱市| 杭锦旗| 巫溪县| 商洛市| 洞头县|