返回
如何获取网站公开证书 PEM:Firefox 和 PHP OpenSSL 的对比
php
2024-03-20 06:46:59
获取网站公开证书 PEM:Firefox 和 PHP OpenSSL 的比较
引言
在现代网络安全实践中,理解和分析网站的公开证书至关重要。本文将探讨使用 Firefox 浏览器和 PHP 中的 OpenSSL 扩展获取网站公开证书 PEM 的不同方法,并比较两者生成的结果。
Firefox 中获取证书
获取证书的过程相对简单:
- 访问目标网站(例如,https://stackoverflow.com)。
- 单击地址栏中的挂锁图标。
- 展开“更多信息”菜单并选择“安全”。
- 在“安全”选项卡中,单击“查看证书”按钮。
- 在弹出的窗口中,选择下载证书(通常为 PEM 格式)。
PHP OpenSSL 中获取证书
在 PHP 中,可以使用 OpenSSL 扩展来获取证书,方法如下:
$url = "ssl://stackoverflow.com:443";
$context = stream_context_create(["ssl" => ["capture_peer_cert" => true]]);
$client = stream_socket_client($url, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
$params = stream_context_get_params($client);
$certificate = $params["options"]["ssl"]["peer_certificate"];
结果差异
Firefox 生成的是一个完整的证书链,包括根证书和中间证书。而 PHP OpenSSL 仅获取叶证书(即公开证书)。
要获取与 Firefox 相同的证书链,需要使用 capture_peer_cert_chain
选项:
$context = stream_context_create(["ssl" => ["capture_peer_cert_chain" => true]]);
证书用途
网站公开证书 PEM 有各种用途,包括:
- 验证网站的身份和所有权。
- 检查证书的有效性,包括颁发机构和到期日期。
- 查找中间证书和根证书。
- 识别证书颁发机构 (CA)。
结论
通过使用 PHP OpenSSL 和 capture_peer_cert_chain
选项,我们可以获取与 Firefox 相同的完整证书链。理解证书链对于网站安全和验证网站的身份至关重要。
常见问题解答
- 为什么需要获取网站的证书?
获取证书对于验证网站的身份和安全性至关重要。 - Firefox 和 PHP OpenSSL 中的结果为什么不同?
Firefox 生成证书链,而 PHP OpenSSL 默认仅获取叶证书。 - 如何验证证书的有效性?
可以使用 OpenSSL 命令或在线工具验证证书的有效期和签发者。 - 证书链中有哪些类型的证书?
证书链通常包含叶证书、中间证书和根证书。 - 我可以在哪里了解更多关于 PHP OpenSSL 和证书?
有关 PHP OpenSSL 的更多信息,请参阅官方文档;有关证书,请参阅 CA/Browser 论坛。