返回

如何获取网站公开证书 PEM:Firefox 和 PHP OpenSSL 的对比

php

获取网站公开证书 PEM:Firefox 和 PHP OpenSSL 的比较

引言

在现代网络安全实践中,理解和分析网站的公开证书至关重要。本文将探讨使用 Firefox 浏览器和 PHP 中的 OpenSSL 扩展获取网站公开证书 PEM 的不同方法,并比较两者生成的结果。

Firefox 中获取证书

获取证书的过程相对简单:

  1. 访问目标网站(例如,https://stackoverflow.com)。
  2. 单击地址栏中的挂锁图标。
  3. 展开“更多信息”菜单并选择“安全”。
  4. 在“安全”选项卡中,单击“查看证书”按钮。
  5. 在弹出的窗口中,选择下载证书(通常为 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 相同的完整证书链。理解证书链对于网站安全和验证网站的身份至关重要。

常见问题解答

  1. 为什么需要获取网站的证书?
    获取证书对于验证网站的身份和安全性至关重要。
  2. Firefox 和 PHP OpenSSL 中的结果为什么不同?
    Firefox 生成证书链,而 PHP OpenSSL 默认仅获取叶证书。
  3. 如何验证证书的有效性?
    可以使用 OpenSSL 命令或在线工具验证证书的有效期和签发者。
  4. 证书链中有哪些类型的证书?
    证书链通常包含叶证书、中间证书和根证书。
  5. 我可以在哪里了解更多关于 PHP OpenSSL 和证书?
    有关 PHP OpenSSL 的更多信息,请参阅官方文档;有关证书,请参阅 CA/Browser 论坛。