从各种来源收集并导出证书指标:
这些指标都标有证书中的字段,便于创建信息仪表盘和灵活的告警路由。
make
./ssl_exporter <参数>
与 blackbox_exporter 类似,访问 http://localhost:9219/probe?target=example.com:443 将返回 example.com 的证书指标。ssl_probe_success
指标表示探测是否成功。
docker run -p 9219:9219 ribbybibby/ssl-exporter:latest <参数>
用法: ssl_exporter [<参数>]
参数:
-h, --help 显示上下文相关帮助(也可尝试 --help-long 和 --help-man)。
--web.listen-address=":9219"
监听 web 界面和遥测数据的地址。
--web.metrics-path="/metrics"
暴露指标的路径
--web.probe-path="/probe" 暴露探测端点的路径
--config.file="" SSL 导出器配置文件
--log.level="info" 仅记录给定严重级别或更高级别的日志消息。有效级别: [debug, info, warn, error, fatal]
--log.format="logger:stderr"
设置日志目标和格式。示例:
"logger:syslog?appname=bob&local=7" 或
"logger:stdout?json=true"
--version 显示应用版本。
指标 | 含义 | 标签 | 探测器 |
---|---|---|---|
ssl_cert_not_after | 对等证书过期的日期。以 Unix 时间戳表示。 | serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | tcp, https |
ssl_cert_not_before | 对等证书生效的日期。以 Unix 时间戳表示。 | serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | tcp, https |
ssl_file_cert_not_after | 文件探测器找到的证书过期日期。以 Unix 时间戳表示。 | file, serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | file |
ssl_file_cert_not_before | 文件探测器找到的证书生效日期。以 Unix 时间戳表示。 | file, serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | file |
ssl_kubernetes_cert_not_after | Kubernetes 探测器找到的证书过期日期。以 Unix 时间戳表示。 | namespace, secret, key, serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | kubernetes |
ssl_kubernetes_cert_not_before | Kubernetes 探测器找到的证书生效日期。以 Unix 时间戳表示。 | namespace, secret, key, serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | kubernetes |
ssl_kubeconfig_cert_not_after | kubeconfig 探测器找到的证书过期日期。以 Unix 时间戳表示。 | kubeconfig, name, type, serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | kubeconfig |
ssl_kubeconfig_cert_not_before | kubeconfig 探测器找到的证书生效日期。以 Unix 时间戳表示。 | kubeconfig, name, type, serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | kubeconfig |
ssl_ocsp_response_next_update | OCSP 响应中的 nextUpdate 值。以 Unix 时间戳表示 | tcp, https | |
ssl_ocsp_response_produced_at | OCSP 响应中 的 producedAt 值。以 Unix 时间戳表示 | tcp, https | |
ssl_ocsp_response_revoked_at | OCSP 响应中的 revocationTime 值。以 Unix 时间戳表示 | tcp, https | |
ssl_ocsp_response_status | OCSP 响应中的状态。0=正常 1=已吊销 2=未知 | tcp, https | |
ssl_ocsp_response_stapled | 连接状态是否包含附加的 OCSP 响应? 布尔值。 | tcp, https | |
ssl_ocsp_response_this_update | OCSP 响应中的 thisUpdate 值。以 Unix 时间戳表示 | tcp, https | |
ssl_probe_success | 探测是否成功? 布尔值。 | 全部 | |
ssl_prober | 导出器用于连接目标的探测器。布尔值。 | prober | 全部 |
ssl_tls_version_info | 使用的 TLS 版本。始终为 1。 | version | tcp, https |
ssl_verified_cert_not_after | 已验证链中证书的过期日期。以 Unix 时间戳表示。 | chain_no, serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | tcp, https |
ssl_verified_cert_not_before | 已验证链中证书的生效日期。以 Unix 时间戳表示。 | chain_no, serial_no, issuer_cn, cn, dnsnames, ips, emails, ou | tcp, https |
就像 blackbox_exporter 一样,你应该在刮取配置中通过巧妙的重新标记将目标传递给导出器的单个实例。这允许你利用服务发现并将配置集中在 Prometheus 配置中。
scrape_configs: - job_name: "ssl" metrics_path: /probe static_configs: - targets: - example.com:443 - prometheus.io:443 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 127.0.0.1:9219 # SSL 导出器。
默认情况下,导出器将与目标建立 TCP 连接。这适用于大多数情况,但如果你想利用 http 代理,可以通过设置 https
模块参数来使用 HTTPS 客户端:
scrape_configs: - job_name: "ssl" metrics_path: /probe params: module: ["https"] # <----- static_configs: - targets: - example.com:443 - prometheus.io:443 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 127.0.0.1:9219
这将使用环境变量 HTTP_PROXY
、HTTPS_PROXY
和 ALL_PROXY
发现的代理服务器。或者,你可以在模块配置中设置 https.proxy_url
选项。
后者优先级更高。
file
探测器为本地文件中找到的 PEM 编码证书导出 ssl_file_cert_not_after
和 ssl_file_cert_not_before
。
可以通过提供目标参数来刮取导出器本地的文件:
curl "localhost:9219/probe?module=file&target=/etc/ssl/cert.pem"
目标参数支持通配(由 doublestar 包提供),允许你一次捕获多个文件:
curl "localhost:9219/probe?module=file&target=/etc/ssl/**/*.pem"
此探测器的一个特定用途可以是在 Kubernetes 中将导出器作为 DaemonSet 运行,然后刮取每个实例以检查每个节点上证书的过期时间:
scrape_configs: - job_name: "ssl-kubernetes-file" metrics_path: /probe params: module: ["file"] target: ["/etc/kubernetes/**/*.crt"] kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__address__] regex: ^(.*):(.*)$ target_label: __address__ replacement: ${1}:9219
http_file
探测器为指定 URL 中找到的 PEM 编码证书导出 ssl_cert_not_after
和 ssl_cert_not_before
。
curl "localhost:9219/probe?module=http_file&target=https://www.paypalobjects.com/marketing/web/logos/paypal_com.pem"
这是一个示例 Prometheus 配置:
scrape_configs: - job_name: 'ssl-http-files' metrics_path: /probe params: module: ["http_file"] static_configs: - targets: - 'https://www.paypalobjects.com/marketing/web/logos/paypal_com.pem' - 'https://d3frv9g52qce38.cloudfront.net/amazondefault/amazon_web_services_inc_2024.pem' relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 127.0.0.1:9219
对于代理到目标资源,此探测器将使用在环境变量 HTTP_PROXY
、HTTPS_PROXY
和 ALL_PROXY
中发现的代理服 务器。或者,你可以在模块配置中设置 http_file.proxy_url
选项。
后者优先级更高。
kubernetes
探测器为类型为 kubernetes.io/tls
的密钥中找到的 PEM 编码证书导出 ssl_kubernetes_cert_not_after
和 ssl_kubernetes_cert_not_before
。
以 <命名空间>/<名称>
的形式提供密钥的命名空间和名称作为目标:
curl "localhost:9219/probe?module=kubernetes&target=kube-system/secret-name"
目标的命名空间和名称部分都支持通配符匹配(由 doublestar 包提供):
curl "localhost:9219/probe?module=kubernetes&target=kube-system/*"
curl "localhost:9219/probe?module=kubernetes&target=*/*"
导出器按以下顺序从以下来源检索凭证和上下文配置:
kubeconfig
路径$KUBECONFIG
环境变量$HOME/.kube/config
)- job_name: "ssl-kubernetes" metrics_path: /probe params: module: ["kubernetes"] static_configs: - targets: - "test-namespace/nginx-cert" relabel_configs: - source_labels: [ __address__ ] target_label: __param_target - source_labels: [ __param_target ] target_label: instance - target_label: __address__ replacement: 127.0.0.1:9219
kubeconfig
探测器为指定 kubeconfig 文件中找到的 PEM 编码证书导出 ssl_kubeconfig_cert_not_after
和 ssl_kubeconfig_cert_not_before
。
可以通过提供目标参数来刮取导出器本地的 kubeconfig:
curl "localhost:9219/probe?module=kubeconfig&target=/etc/kubernetes/admin.conf"
此探测器的一个特定用途可以是在 Kubernetes 中将导出器作为 DaemonSet 运行,然后刮取每个实例以检查每个节点上证书的过期时间:
scrape_configs: - job_name: "ssl-kubernetes-kubeconfig" metrics_path: /probe params: module: ["kubeconfig"] target: ["/etc/kubernetes/admin.conf"] kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__address__] regex: ^(.*):(.*)$ target_label: __address__ replacement: ${1}:9219
你可以通过提供配置文件的路径来进行进一步的模块配置,使用 --config.file
参数。该文件以 yaml 格式编写,由以下模式定义。
# 默认使用的模块。如果省略,则必须通过 'module' 查询参数提供模块
default_module: <string>
# 模块配置
modules: [<module>]
# 探测类型(https、tcp、file、kubernetes、kubeconfig)
prober: <prober_string>
# 探测目标。如果设置,则忽略 'target' 查询参数。
# 如果省略,则需要 'target' 查询参数。
target: <string>
# 探测等待超时时间。
[ timeout: <duration> ]
# TLS 配置
[ tls_config: <tls_config> ]
# 特定探测配置
[ https: <https_probe> ]
[ tcp: <tcp_probe> ]
[ kubernetes: <kubernetes_probe> ]
[ http_file: <http_file_probe> ]
# 禁用目标证书验证。
[ insecure_skip_verify: <boolean> | default = false ]
# 配置 TLS 重新协商支持。
# 有效选项:never、once、freely
[ renegotiation: <string> | default = never ]
# 用于目标的 CA 证书。
[ ca_file: <filename> ]
# 用于目标的客户端证书文件。
[ cert_file: <filename> ]
# 用于目标的客户端密钥文件。
[ key_file: <filename> ]
# 用于验证目标主机名。
[ server_name: <string> ]
# 用于连接目标的 HTTP 代理服务器。
[ proxy_url: <string> ]
# 在启动 TLS 之前使用 STARTTLS 命令(适用于支持的协议:smtp、ftp、imap、pop3、postgres)
[ starttls: <string> ]
# 用于配置探测的 kubeconfig 文件路径
[ kubeconfig: <string> ]
# 用于连接目标的 HTTP 代理服务器。
[ proxy_url: <string> ]
7 天内过期的证书:
ssl_cert_not_after - time() < 86400 * 7
即将过期的通配符证书:
ssl_cert_not_after{cn=~"\*.*"} - time() < 86400 * 7
在验证链中 7 天内过期且最晚过期的证书:
ssl_verified_cert_not_after{chain_no="0"} - time() < 86400 * 7
服务器提供的证书数量:
count(ssl_cert_not_after) by (instance)
识别失败的探测:
ssl_probe_success == 0
对等证书和客户端构建的验证链的 NotAfter
和 NotBefore
字段都会导出指标。
前者仅包括目标明确提供的证书,而后者可能包含多个由客户端持有的根证书到目标服务器证书构建的信任链。
这在监控证书过期时有重要影响。
例如,ssl_cert_not_after
可能报告目标提供的根证书即将过期,即使客户端可以使用本地持有的另一个有效根证书形成另一个更长寿命的信任链。在这种情况下,你可能想使用 ssl_verified_cert_not_after
来警告过期,因为这将包含客户端实际构建的链:
ssl_verified_cert_not_after{chain_no="0"} - time() < 86400 * 7
导出器按过期时间的相反顺序为每个链编号,因此 chain_no="0"
是最晚过期的链。因此,上面的查询只会在导出器和目标之间的信任链真正接近过期时发出警报。
非常重要的是要注意,这种查询仅代表导出器和目标之间的信任链。真正的客户端可能持有不同于导出器的根证书,因此可能有不同的验证信任链。
你可以在这里找到一个简单的仪表板,用于跟踪证书过期日期和目标连接错误。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报 告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的 技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号