介绍
这期内容当中小编将会给大家带来有关怎么在PHP中利用套接字对网站的SSL证书与公钥进行获取,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强>示例代码:强>
//,创建,stream 上下文 $ context =, stream_context_create ([ ,& # 39;ssl # 39;,=祝辞,( & # 39;才能capture_peer_cert& # 39;,=祝辞,真的, & # 39;才能capture_peer_cert_chain& # 39;,=祝辞,真的, ,), ]); , $ resource =, stream_socket_client (“ssl://美元域:$ port",, errno美元,errstr美元,30日,STREAM_CLIENT_CONNECT,,美元上下文); $ cert =, stream_context_get_params(资源); , 美元$ ssl =, cert(& # 39;选项# 39;][& # 39;ssl # 39;]; 美元$ resource =, ssl (& # 39; peer_certificate& # 39;); ,//,网站证书中只有公钥,通过,openssl_pkey_get_details 导出公钥 , $ ret =, ( ,& # 39;crt # 39;,=祝辞,& # 39;& # 39; ,& # 39;酒吧# 39;,=祝辞,& # 39;& # 39; ]; , $ pkey =, openssl_pkey_get_public(资源); $ ret[& # 39;酒吧# 39;],=,openssl_pkey_get_details (pkey美元)(& # 39;关键# 39;); , openssl_x509_export(资源,美元,美元pem); $ ret [& # 39; crt # 39;],=, pem美元; , foreach ($ ssl [& # 39; peer_certificate_chain& # 39;], as 美元资源) { ,openssl_x509_export(资源,美元,美元pem); ,$ ret [& # 39; crt # 39;],。=,“\ n",只pem美元; } ,//,保存,随著美元[& # 39;crt # 39;],为domain.crt//,保存,随著美元[& # 39;酒吧# 39;],为domain.pub , return 美元ret;
<强>验证证书中的公钥一是否正确,通过私钥导出公钥B,比较两者发现一致。强>
domain 美元;=,& # 39;blog.zhengxianjun.com& # 39;; 时间=美元port & # 39; 443 & # 39;;//,… 美元$ pub_a =, ret[& # 39;酒吧# 39;]; , 时间=美元private_key_path & # 39;/conf/ssl/blog.zhengxianjun.com.key& # 39;; ,//,证书没有设置密码,passphrase 美元;为空字符串 pkey 美元;=,openssl_pkey_get_private (file_get_content (private_key_path美元),,passphrase 美元;=,& # 39;& # 39;); $ pub_b =, openssl_pkey_get_details (pkey美元)(& # 39;关键# 39;); ,//,两者一致 var_dump()美元pub_a ===, pub_b美元);
函数stream_socket_client还有一个用途是当知道服务器IP时,能获取到服务器可能可以使用的域名。
resource 美元;=,stream_socket_client (“ssl://$ IP: $ port",, errno美元,errstr美元,30日,STREAM_CLIENT_CONNECT,,美元上下文); $ cert =, stream_context_get_params(资源); ,//,解析,X.509 格式证书 info 美元;=,openssl_x509_parse (cert(& # 39;选项# 39;][& # 39;ssl # 39;] [& # 39; peer_certificate& # 39;]); ,//,获取证书中的可信域名列表 domain 美元;=,str_replace (& # 39; DNS: & # 39;,, & # 39; & # 39;,,美元信息[& # 39;扩展# 39;][& # 39;subjectAltName& # 39;]);
<强>以上可以看到获取网站证书并不能获得私钥。强>
在一些使用CDN的站点,如果使用了HTTPS同时又希望使用自有域名,是否需要将自己的私钥提供给CDN厂商呢?实际上证书路径与使用者名称(支持HTTPS的域名)并不需要一致。
也就是使用自有域名并进行CDN加速时不需要使用自有ssl证的书,只需将自己的CDN域名加到厂商证书的域名列表即可。
上述就是小编为大家分享的怎么在PHP中利用套接字对网站的ssl证书与公钥进行获取了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。