Skip to content

Censys 联动

crt.sh 善于"证书本身"的检索,Censys 善于"证书在互联网上的暴露面"检索。两者联动,能力互补。SDK 的 BuildCensysURL 把 crt.sh 的查询翻译成 Censys 查询 URL。

BuildCensysURL纯字符串映射零网络/零延迟

互补关系

📜crt.sh 强项
证书签发历史、按 SHA 指纹/序列号查、CT 日志全景
🌐Censys 强项
证书在哪些主机上使用、全网扫描暴露面、实时端口/服务指纹
🔗BuildCensysURL
把 crt.sh 查询翻译成 Censys URL,衔接两者
flowchart LR subgraph crtsh["crt.sh 强项"] A1["证书签发历史"] A2["按 SHA 指纹/序列号查"] A3["CT 日志全景"] end subgraph censys["Censys 强项"] B1["证书在哪些主机上使用"] B2["全网扫描的暴露面"] B3["实时端口/服务指纹"] end crtsh -->|"BuildCensysURL 衔接"| censys

BuildCensysURL

go
u, _ := crtsh.BuildCensysURL("dNSName", "example.com")
// u = https://search.censys.io/search?resource=certificates&q=...

零网络

这是 SDK 里少数不发 HTTP 请求的方法——纯字符串映射,零延迟、零网络。

类型映射

BuildCensysURL 把 crt.sh 的搜索类型翻译成 Censys 的查询语法:

crt.sh 类型Censys 查询字段
cfingerprint_sha1 OR fingerprint_sha256
serialparsed.serial_number_hex
sha1fingerprint_sha1
sha256fingerprint_sha256
ca / CANameparsed.issuer_dn
Identitynames
CNparsed.subject.common_name
OUparsed.subject.organizational_unit
Oparsed.subject.organization
dNSNameparsed.extensions.subject_alt_name.dns_names
rfc822Nameparsed.extensions.subject_alt_name.email_addresses
iPAddressparsed.extensions.subject_alt_name.ip_addresses

Censys 不支持的类型

会返回 InvalidError

Censys 不支持以下 crt.sh 类型:idctidskispkisha1spkisha256subjectsha1ECAID

这与 crt.sh 前端 JS 的 alert() 行为一致——SDK 忠实复刻了它的 CensysUnsupportedTypes 白名单。

典型联动流程

flowchart TD S["crt.sh 搜某域名"] --> IDS["拿到证书 ID/SHA"] IDS --> BCU["BuildCensysURL(sha256, ...)"] BCU --> CU["Censys 查询 URL"] CU --> CEN["Censys 搜:哪些主机在用这张证书"]
go
// crt.sh 找证书 → Censys 找使用方
certs, _, _ := client.SearchCertificates(ctx, crtsh.QueryParams{Q: "example.com"})
if len(certs) > 0 {
    censysURL, _ := crtsh.BuildCensysURL("dNSName", "example.com")
    fmt.Println("去 Censys 看暴露面:", censysURL)
}

功能原理到这里讲完了

接下来看 使用方式