参考

SSLCertificate类封装了 SSL 证书的数据,并允许以各种格式(PEM、DER、JSON 或文本)导出。每当您在 Crawl4AI 中设置fetch_ssl_certificate=True在你的CrawlerRunConfig

1.概述

地点:crawl4ai/ssl_certificate.py

class SSLCertificate:
    """
    Represents an SSL certificate with methods to export in various formats.

    Main Methods:
    - from_url(url, timeout=10)
    - from_file(file_path)
    - from_binary(binary_data)
    - to_json(filepath=None)
    - to_pem(filepath=None)
    - to_der(filepath=None)
    ...

    Common Properties:
    - issuer
    - subject
    - valid_from
    - valid_until
    - fingerprint
    """

典型用例

  1. 您可以通过以下方式在爬网中启用证书获取:
    CrawlerRunConfig(fetch_ssl_certificate=True, ...)
    
  2. arun(), 如果result.ssl_certificate存在,它是SSLCertificate
  3. 您可以读取基本属性(发行者、主题、有效性)或以多种格式导出它们。

2. 构造与获取

2.1from_url(url, timeout=10)

从给定 URL(端口 443)手动加载 SSL 证书。通常在内部使用,但您可以根据需要直接调用它:

cert = SSLCertificate.from_url("https://example.com")
if cert:
    print("Fingerprint:", cert.fingerprint)

2.2from_file(file_path)

从包含 ASN.1 或 DER 格式证书数据的文件中加载。除非您有本地证书文件,否则很少需要:

cert = SSLCertificate.from_file("/path/to/cert.der")

2.3from_binary(binary_data)

从原始二进制文件初始化。例如,如果你从套接字或其他来源捕获了它:

cert = SSLCertificate.from_binary(raw_bytes)

3. 通用属性

获得SSLCertificate实例(例如result.ssl_certificate从爬网中,您可以阅读:

1.issuer (字典) - 例如{"CN": "My Root CA", "O": "..."}2.subject (字典) - 例如{"CN": "example.com", "O": "ExampleOrg"}3.valid_from (str) - NotBefore 日期/时间。通常采用 ASN.1/UTC 格式。4.valid_until (str) - NotAfter 日期/时间。5.fingerprint (str) - SHA-256 摘要(小写十六进制)。 - 例如"d14d2e..."


4. 导出方法

一旦你有SSLCertificate对象,您可以导出或检查它:

4.1to_json(filepath=None)Optional[str]

  • 返回包含已解析证书字段的 JSON 字符串。
  • 如果filepath提供后,将其保存到磁盘,返回None

用法:

json_data = cert.to_json()  # returns JSON string
cert.to_json("certificate.json")  # writes file, returns None

4.2to_pem(filepath=None)Optional[str]

  • 返回 PEM 编码的字符串(Web 服务器常用)。
  • 如果filepath提供后,将其保存到磁盘。
pem_str = cert.to_pem()              # in-memory PEM string
cert.to_pem("/path/to/cert.pem")     # saved to file

4.3to_der(filepath=None)Optional[bytes]

  • 返回原始 DER(二进制 ASN.1)字节。
  • 如果filepath已指定,则将字节写入那里。
der_bytes = cert.to_der()
cert.to_der("certificate.der")

4.4(可选)export_as_text()

  • 如果你看到类似的方法export_as_text(),它通常返回 OpenSSL 样式的文本表示。
  • 并非总是需要,但可以帮助调试或手动检查。

5. Crawl4AI 中的示例用法

下面是一个最简单的示例,展示了爬虫如何从网站获取 SSL 证书,然后读取或导出证书。代码片段如下:

import asyncio
import os
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode

async def main():
    tmp_dir = "tmp"
    os.makedirs(tmp_dir, exist_ok=True)

    config = CrawlerRunConfig(
        fetch_ssl_certificate=True,
        cache_mode=CacheMode.BYPASS
    )

    async with AsyncWebCrawler() as crawler:
        result = await crawler.arun("https://example.com", config=config)
        if result.success and result.ssl_certificate:
            cert = result.ssl_certificate
            # 1. Basic Info
            print("Issuer CN:", cert.issuer.get("CN", ""))
            print("Valid until:", cert.valid_until)
            print("Fingerprint:", cert.fingerprint)

            # 2. Export
            cert.to_json(os.path.join(tmp_dir, "certificate.json"))
            cert.to_pem(os.path.join(tmp_dir, "certificate.pem"))
            cert.to_der(os.path.join(tmp_dir, "certificate.der"))

if __name__ == "__main__":
    asyncio.run(main())

6. 注意事项和最佳实践

1. 超时:SSLCertificate.from_url内部使用默认的 10s 套接字连接并包装 SSL。2. 二进制形式:证书以 ASN.1(DER)格式加载,然后由OpenSSL.crypto3. 验证:这不会验证证书链或信任库。它只会获取和解析。4. 集成:在 Crawl4AI 中,通常只需设置fetch_ssl_certificate=TrueCrawlerRunConfig;最终结果ssl_certificate自动构建。5.导出:如果您需要存储或分析证书,to_jsonto_pem具有相当的普遍性。


概括

  • 是一个方便的类,用于从您抓取的站点捕获和导出 TLS 证书。
  • 常见用法是CrawlResult.ssl_certificate字段,设置后可访问fetch_ssl_certificate=True
  • 提供对基本证书详细信息的快速访问(issuersubjectfingerprint ) 并且易于导出(PEM、DER、JSON)以供进一步分析或服务器使用。

当您需要了解站点的证书或需要某种形式的加密或合规性检查时,请使用它。


> Feedback