sslx: 一个检测、查看 HTTPS 证书信息的跨平台单文件命令行工具

sslx: 一个检测、查看 HTTPS 证书信息的跨平台单文件命令行工具

每次要查个证书,都得先打开浏览器,反复搜 「openssl 查看证书命令」。大概不是我一个人会这么做。

openssl 是个好东西,密码学库该有的它几乎都有,但那个 CLI 像是从九十年代穿越过来的------同一个"看证书"的动作,x509 -in xxx -text -noout,少一个参数就报错;想比一下证书和私钥配不配,还得 diff <(openssl x509 -noout -modulus ...) <(openssl rsa -noout -modulus ...) 复杂命令,每次都得现抄。

今天推荐的 sslx,就是解决这个痛点的。

sslx 是什么?

一个用 Rust 写的、专门用来操作证书和 TLS 相关任务的单文件命令行工具 。

其项目口号非常直白------「openssl, but you don't have to google the flags」。不追求把 openssl 那套功能全搬过来,而是把日常高频使用的那十来个命令,做成不用 Google 也能记得住、敲得顺的命令集合。

底层用的是 rustls,不依赖系统 OpenSSL,编译出来是个静态单一二进制程序,不用担心系统上没装 openssl 或版本对不上。

有哪些特点?

  • 命令直白 :inspect、connect、grade、expiry 等......看名字就知道功能,不用死记硬背。

  • 输出直观:带颜色的卡片式输出,证书链用箭头连起来,剩余有效期还有进度条,比 openssl 一坨纯文本强太多。

  • 一个程序搞定多件事:PEM/DER/PKCS12 互转、证书私钥匹配、CSR 生成、JWT 解码,全在一个工具里。

  • 天生适合脚本 :每个命令都支持 --json,退出码也有明确含义(0 正常、1 过期、3 链不可信、4 连接失败、5 文件格式错、10 参数错)等,塞进 CI 和 cron 里毫无压力。

  • 体积小、启动快 :约 3MB,M2 上启动 1.3ms,inspect 一个证书 2.1ms,比 openssl 快十几倍。
    sslx 并非 openssl 的完全替代品 。需要做对称加密、算摘要、解析任意 ASN.1、搞 TLS 服务端开发,它做不了。如果要的是把根 CA 塞进系统信任库、或者搭一套完整的内部 PKI,那 mkcert 和 step-cli 更合适。sslx 的定位就是"日常证书和 TLS 操作的快捷命令合集"。

    如何安装?

    项目地址:https://github.com/glincker/sslx

    bash 复制代码
    # 有 Rust 环境
    cargo install sslx
    # macOS 可以用 Homebrew
    brew install glincker/tap/sslx

    懒得装工具链的,直接下预编译二进制:

    bash 复制代码
    # macOS (Apple Silicon)
    curl -fsSL https://github.com/glincker/sslx/releases/latest/download/sslx-macos-aarch64 -o sslx && chmod +x sslx
    # Linux x86_64
    curl -fsSL https://github.com/glincker/sslx/releases/latest/download/sslx-linux-x86_64 -o sslx && chmod +x sslx

    Windows 上直接 cargo install sslx 就行,Rust 是跨平台的。装完输入 sslx --version 有输出版本,如 sslx 0.3.1 表示安装成功。
    顺手把补全也装上,敲命令能省不少事:

    bash 复制代码
    sslx completions bash > /etc/bash_completion.d/sslx
    sslx completions zsh  > ~/.zsh/completions/_sslx
    sslx completions fish > ~/.config/fish/completions/sslx.fish

    用法详解

    下面按实际用到的顺序讲

    sslx inspect:查阅证书文件信息

    假如同事甩给你一个 cert.pem,说"帮忙看看这证书对不对"。

    bash 复制代码
    sslx inspect cert.pem

    PEM、DER 自动识别,多证书的 bundle 也能一次全展开,彩色输出里有主题、颁发者、序列号、有效期(带剩余天数进度条)、密钥类型、SAN 列表、SHA-256 指纹。以前 openssl 要 -text -noout 翻半天,现在一眼看完。
    脚本里想取天数:

    bash 复制代码
    sslx inspect cert.pem --json | jq '.certificates[0].days_remaining'

    sslx connect:测试新部署的站点握手是否正常

    刚把服务上线,想确认 HTTPS 握手有没有问题、证书链全不全、ALPN 走的是 h2 还是 http/1.1。

    bash 复制代码
    sslx connect example.com
    sslx connect mail.example.com:587   # 非 443 端口直接写 host:port

    会输出 TLS 版本、密码套件、ALPN,然后把整条证书链画出来,谁签的谁一目了然。以前得 openssl s_client -connect ... 2>/dev/null | openssl x509 -text 拼两条命令,现在一条就搞定。

    sslx grade:接手老系统,先给它打个分

    接手了一套祖传服务,不知道 TLS 配置烂到什么程度,先摸个底。

    bash 复制代码
    sslx grade github.com

    协议版本、密码强度、证书有效性、密钥类型、主机名匹配、链完整性、ALPN 全查一遍,最后给个 A+ 到 F 的等级。相当于把 SSL Labs 搬到终端里,还不用等网页排队。
    CI 里想拿分数做门禁:

    bash 复制代码
    sslx grade example.com --json | jq -r '.grade'

    sslx expiry:一堆域名,不用挨个手动查

    手上十几个域名,每个月挨个查过期时间,纯体力活。

    bash 复制代码
    sslx expiry google.com github.com cloudflare.com stripe.com

    直接用表格列出来,到期日、剩余天数、状态一清二楚。只要有证书 7 天内过期,退出码就是 1 ,所以扔进 cron 很合适:

    bash 复制代码
    0 8 * * * /usr/local/bin/sslx expiry prod.example.com api.example.com || notify-send "cert expiring"

    sslx verify:自建 CA 签的证书,验一下

    内部 CA 给服务签了证书,想确认链是完整的、没过期、确实是这个 CA 签的。

    bash 复制代码
    sslx verify cert.pem --ca ca-bundle.pem

    通不过的时候它会把原因说清楚,还给修复提示,比 openssl 只有 unable to verify 友好得多。

    sslx match:证书和私钥配不配

    换服务器,证书和私钥拷来拷去,怕配错导致 nginx 起不来。

    bash 复制代码
    sslx match cert.pem key.pem

    匹配就输出密钥类型,不匹配直接报错。再不用繁琐的 diff <(openssl x509 -noout -modulus ...) <(...) 了。

    sslx generate:本地开发创建自签名证书

    本地起个服务想走 HTTPS,懒得折腾 CA。

    bash 复制代码
    sslx generate --cn localhost
    sslx generate --cn myapp.local --san "*.myapp.local,192.168.1.100"
    sslx generate --cn localhost --key-type ed25519

    默认生成 cert.pem 和 key.pem,密钥默认 EC P-256,也能选 ec384、ed25519。注意它不会 把证书装进系统信任库,浏览器还是会警告。

    sslx csr:向 CA 申请证书,先出 CSR

    买了张证书,CA 让你交 CSR。

    bash 复制代码
    sslx csr --cn example.com --san "*.example.com,api.example.com"

    生成 csr.pem 和 key.pem,CSR 交给 CA,私钥自己留好。

    sslx convert:格式不对,转一下

    老系统只认 DER,或者别人给了个 p12 你要转成 PEM。

    bash 复制代码
    sslx convert cert.pem --to der
    sslx convert cert.der --to pem
    sslx convert bundle.p12 --to pem --password mypass

    输入格式自动检测,不用告诉它"我这是 PEM 还是 DER"。

    sslx extract:从 p12 里把东西拆出来

    运维给你一个 bundle.p12,你要拆出叶子证书、中间证书和私钥,配到 nginx 上。

    bash 复制代码
    sslx extract bundle.p12 --password mypass --out ./certs

    三类文件分别保存到 ./certs 下,省得再用 openssl pkcs12 那一套复杂的参数。

    sslx decode:不知道这文件是啥,扔给它

    收到一个来路不明的文件,或者拿到一个 JWT 想看里面写了啥。

    bash 复制代码
    sslx decode mystery-file.pem
    sslx decode eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMTIzIn0.signature

    PEM 证书、DER 证书、RSA/EC/PKCS8 私钥、公钥、CSR、JWT,自动识别。JWT 会把 header、payload 和过期时间打出来,不用再开 jwt.io 贴来贴去。

    全局选项:--json 和退出码

    这两个是把它用进自动化的关键。所有命令都支持 --json:

    bash 复制代码
    sslx connect example.com --json | jq '.chain.certificates[0].sans'
    sslx inspect cert.pem --json | jq '.certificates[0].is_expired'

    退出码含义见上文,配合 set -e 在 shell 脚本和 CI 里很好使。嫌颜色碍事加 --no-color。


作者

张赐荣 ,视障者,无障碍技术专家、软件工程师、信息无障碍推动者。长期从事面向视障群体的辅助技术研发与互联网产品无障碍改造相关工作,在Web、PC及移动端的可访问性技术研究方面具有丰富经验。

曾获微软、万维网联盟等多个专业机构颁发的无障碍权威认证,荣获多项无障碍贡献奖。先后主导了《视障学生信息技术学习情况调研报告》,参与撰写《无障碍网页开发指南》,翻译了《无障碍工程实践》书籍等。同时,受邀在CSDN、博客园等各大知名技术交流社区创建专栏,发布数百篇无障碍教程,系统地推动了无障碍技术的普及和落地工作。

相关推荐
辛迪聊物业数字化2 小时前
物业费收缴率从68%提升到97%落地复盘:中小物业收费系统选型避坑指南
人工智能·嵌入式硬件·物联网·网络协议·系统架构
80s7772 小时前
态住宅IP在跨境电商防关联中的技术应用
网络·网络协议·tcp/ip
XiYang-DING2 小时前
【WebSocket】文本帧Text Frame
网络·websocket·网络协议
Novproxy_Z2 小时前
代理 IP 黑白名单体系搭建:自动标记风控 IP,减少封号
网络·网络协议·tcp/ip
RacentCLM3 小时前
HTTPS只在登录时有用?关于TLS的误解讲清
数据库·网络协议·https
雪雪爱冲浪3 小时前
用 Kimi 做网页抓取:从零开始的科普指南
网络协议
m0_639906944 小时前
RESTful API 接口设计规范:资源导向、HTTP 语义、统一返回格式、避坑指南
http·restful·设计规范
洋不写bug4 小时前
HTTP(二):万字解析HTTP交互的请求、响应报文格式
网络协议·http·交互·postman·请求格式·响应格式·restful规范
sun0077004 小时前
ip rule路由
网络·网络协议·tcp/ip