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 sslxWindows 上直接
cargo install sslx就行,Rust 是跨平台的。装完输入sslx --version有输出版本,如sslx 0.3.1表示安装成功。
顺手把补全也装上,敲命令能省不少事:bashsslx 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,说"帮忙看看这证书对不对"。bashsslx inspect cert.pemPEM、DER 自动识别,多证书的 bundle 也能一次全展开,彩色输出里有主题、颁发者、序列号、有效期(带剩余天数进度条)、密钥类型、SAN 列表、SHA-256 指纹。以前 openssl 要
-text -noout翻半天,现在一眼看完。
脚本里想取天数:bashsslx inspect cert.pem --json | jq '.certificates[0].days_remaining'sslx connect:测试新部署的站点握手是否正常刚把服务上线,想确认 HTTPS 握手有没有问题、证书链全不全、ALPN 走的是 h2 还是 http/1.1。
bashsslx 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 配置烂到什么程度,先摸个底。
bashsslx grade github.com协议版本、密码强度、证书有效性、密钥类型、主机名匹配、链完整性、ALPN 全查一遍,最后给个 A+ 到 F 的等级。相当于把 SSL Labs 搬到终端里,还不用等网页排队。
CI 里想拿分数做门禁:bashsslx grade example.com --json | jq -r '.grade'sslx expiry:一堆域名,不用挨个手动查手上十几个域名,每个月挨个查过期时间,纯体力活。
bashsslx expiry google.com github.com cloudflare.com stripe.com直接用表格列出来,到期日、剩余天数、状态一清二楚。只要有证书 7 天内过期,退出码就是 1 ,所以扔进 cron 很合适:
bash0 8 * * * /usr/local/bin/sslx expiry prod.example.com api.example.com || notify-send "cert expiring"sslx verify:自建 CA 签的证书,验一下内部 CA 给服务签了证书,想确认链是完整的、没过期、确实是这个 CA 签的。
bashsslx verify cert.pem --ca ca-bundle.pem通不过的时候它会把原因说清楚,还给修复提示,比 openssl 只有
unable to verify友好得多。sslx match:证书和私钥配不配换服务器,证书和私钥拷来拷去,怕配错导致 nginx 起不来。
bashsslx match cert.pem key.pem匹配就输出密钥类型,不匹配直接报错。再不用繁琐的
diff <(openssl x509 -noout -modulus ...) <(...)了。sslx generate:本地开发创建自签名证书本地起个服务想走 HTTPS,懒得折腾 CA。
bashsslx 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。
bashsslx csr --cn example.com --san "*.example.com,api.example.com"生成
csr.pem和key.pem,CSR 交给 CA,私钥自己留好。sslx convert:格式不对,转一下老系统只认 DER,或者别人给了个 p12 你要转成 PEM。
bashsslx 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 上。bashsslx extract bundle.p12 --password mypass --out ./certs三类文件分别保存到
./certs下,省得再用 openssl pkcs12 那一套复杂的参数。sslx decode:不知道这文件是啥,扔给它收到一个来路不明的文件,或者拿到一个 JWT 想看里面写了啥。
bashsslx decode mystery-file.pem sslx decode eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMTIzIn0.signaturePEM 证书、DER 证书、RSA/EC/PKCS8 私钥、公钥、CSR、JWT,自动识别。JWT 会把 header、payload 和过期时间打出来,不用再开 jwt.io 贴来贴去。
全局选项:
--json和退出码这两个是把它用进自动化的关键。所有命令都支持
--json:bashsslx 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、博客园等各大知名技术交流社区创建专栏,发布数百篇无障碍教程,系统地推动了无障碍技术的普及和落地工作。