参考
这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
"""
典型用例
- 您可以通过以下方式在爬网中启用证书获取:
CrawlerRunConfig(fetch_ssl_certificate=True, ...)
- 后
arun()
, 如果result.ssl_certificate
存在,它是SSLCertificate
。 - 您可以读取基本属性(发行者、主题、有效性)或以多种格式导出它们。
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 格式证书数据的文件中加载。除非您有本地证书文件,否则很少需要:
2.3from_binary(binary_data)
从原始二进制文件初始化。例如,如果你从套接字或其他来源捕获了它:
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
提供后,将其保存到磁盘。
4.3to_der(filepath=None)
→Optional[bytes]
- 返回原始 DER(二进制 ASN.1)字节。
- 如果
filepath
已指定,则将字节写入那里。
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.crypto
3. 验证:这不会验证证书链或信任库。它只会获取和解析。4. 集成:在 Crawl4AI 中,通常只需设置fetch_ssl_certificate=True
在CrawlerRunConfig
;最终结果ssl_certificate
自动构建。5.导出:如果您需要存储或分析证书,to_json
和to_pem
具有相当的普遍性。
概括
- 是一个方便的类,用于从您抓取的站点捕获和导出 TLS 证书。
- 常见用法是
CrawlResult.ssl_certificate
字段,设置后可访问fetch_ssl_certificate=True
。 - 提供对基本证书详细信息的快速访问(
issuer
,subject
,fingerprint
) 并且易于导出(PEM、DER、JSON)以供进一步分析或服务器使用。
当您需要了解站点的证书或需要某种形式的加密或合规性检查时,请使用它。