亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2017年06月18日 11:10:36   作者:袖之歡  
這篇文章主要給大家介紹了PHP利用Socket獲取網(wǎng)站的SSL證書(shū)與公鑰的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。

通過(guò) php curl 請(qǐng)求網(wǎng)頁(yè)并不能獲取到證書(shū)信息,此時(shí)需要使用 ssl socket 獲取證書(shū)內(nèi)容。下面來(lá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)站證書(shū)中只有公鑰,通過(guò) 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)證證書(shū)中的公鑰A是否正確,通過(guò)私鑰導(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ū)沒(méi)有設(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 格式證書(shū)
$info = openssl_x509_parse($cert['options']['ssl']['peer_certificate']);
 
// 獲取證書(shū)中的可信域名列表
$domain = str_replace('DNS:', '', $info['extensions']['subjectAltName']);

以上可以看到獲取網(wǎng)站證書(shū)并不能獲得私鑰。

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

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論