glincker/sslx

GitHub: glincker/sslx

sslx 是一个用 Rust 和 rustls 构建的快速终端 TLS 工具,旨在以简洁的单一命令替代繁琐的 OpenSSL CLI 操作。

Stars: 10 | Forks: 2

# sslx **openssl,但你不需要去搜索那些 flags。** 这是一个单一的二进制文件,用于处理证书、TLS 连接以及所有那些你通常需要运行三次不同 openssl 命令才能搞定的事情。使用 Rust 和 [rustls](https://github.com/rustls/rustls) 构建,不需要系统级的 OpenSSL。 [![crates.io](https://img.shields.io/crates/v/sslx.svg)](https://crates.io/crates/sslx) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/5c52bc3181215455.svg)](https://github.com/glincker/sslx/actions) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/glincker/sslx/blob/main/LICENSE) ![sslx 演示](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f651a020e2215501.gif) ## 安装 ``` cargo install sslx ``` 在[发布页面](https://github.com/glincker/sslx/releases)下载预构建的二进制文件。 Homebrew: ``` brew install glincker/tap/sslx ``` 或者直接下载: ``` # macOS (Apple Silicon) curl -fsSL https://github.com/glincker/sslx/releases/latest/download/sslx-macos-aarch64 -o sslx && chmod +x sslx # Linux curl -fsSL https://github.com/glincker/sslx/releases/latest/download/sslx-linux-x86_64 -o sslx && chmod +x sslx ``` ## TLS 评级 评估任何主机的 TLS 配置,就像 SSL Labs 一样,但直接在你的终端中运行: ``` $ sslx grade github.com ╭──────────────────────────────────────────╮ │ github.com:443 Grade: A+ │ ╰──────────────────────────────────────────╯ ✓ Protocol TLS 1.3 ✓ Cipher TLS13_AES_128_GCM_SHA256 (AEAD) ✓ Certificate Valid, 49 days remaining ✓ Key ECDSA P-256 (256 bit) ✓ Hostname github.com in SANs ✓ Chain Complete (3 certs) ✓ ALPN HTTP/2 supported ``` 检查协议版本、加密套件强度、证书有效性、密钥类型、主机名匹配、证书链完整性以及 ALPN。为你提供从 A+ 到 F 的字母评级。 ## 过期检查 一次性检查多个主机的证书过期情况: ``` $ sslx expiry google.com github.com cloudflare.com stripe.com Host Expires Days Status ──────────────────────────────────────────────────────────────── ✓ google.com:443 2026-06-15 61 OK ✓ github.com:443 2026-06-03 49 OK ✓ cloudflare.com:443 2026-06-10 56 OK ✓ stripe.com:443 2026-09-01 139 OK ``` 如果有任何证书将在 7 天内过期,则退出码为 1。在 cron 作业或 CI pipeline 中非常有用。 ## 检查证书 通过带颜色的输出读取 PEM 或 DER 证书文件: ``` $ sslx inspect cert.pem ╭─ Certificate 1 of 1 ──────────────────────────────────╮ │ Subject: CN=*.example.com │ │ Issuer: CN=Let's Encrypt Authority X3 │ │ Serial: 0A:1B:2C:3D... │ │ │ │ Valid: 2026-01-15 → 2026-04-15 │ │ Expires: ██░░░░░░░░ 12 days remaining [!] │ │ │ │ Key: ECDSA P-256 (256 bit) │ │ SANs: *.example.com, example.com │ │ SHA-256: AB:CD:EF:12:34... │ ╰──────────────────────────────────────────────────────────╯ ``` 也支持处理多证书 bundle。自动检测 PEM 还是 DER 格式。 ## 连接到主机 查看任何主机的完整 TLS 握手细节和证书链: ``` $ sslx connect example.com Connection to example.com:443 TLS 1.3 · TLS13_AES_256_GCM_SHA384 ALPN: h2 Chain: ╭─ Certificate 1 of 3 ─────────────────────────╮ │ Subject: CN=*.example.com │ │ Valid: 61 days remaining ✓ │ │ Key: ECDSA P-256 (256 bit) │ ╰────────────────────────────────────────────────╯ ↓ signed by ╭─ Certificate 2 of 3 (CA) ────────────────────╮ │ ... │ ╰────────────────────────────────────────────────╯ ``` ## 生成证书 只需一条命令即可为本地开发生成自签名证书: ``` sslx generate --cn localhost --san "*.local,127.0.0.1" ``` 默认创建使用 EC P-256 的 `cert.pem` 和 `key.pem`。同时也支持 `ec384` 和 `ed25519`。 ## 生成 CSR ``` sslx csr --cn example.com --san "*.example.com,api.example.com" ``` 创建 `csr.pem` 和 `key.pem`。将 CSR 提交给你的 CA。 ## 格式转换 ``` sslx convert cert.pem --to der # PEM to DER sslx convert cert.der --to pem # DER to PEM sslx convert bundle.p12 --to pem # PKCS12 to PEM ``` 自动检测输入格式。 ## 检查证书和密钥是否匹配 ``` $ sslx match cert.pem key.pem ✓ Certificate and key match (ECDSA P-256 (256 bit)) ``` 不再需要手动对比 modulus hash。 ## 从 PKCS12 中提取 ``` sslx extract bundle.p12 --password mypass --out ./certs ``` 将叶子证书、中间证书和密钥提取到单独的 PEM 文件中。 ## 解码任何内容 把文件或者 JWT token 丢给它,sslx 就能弄清楚它是什么: ``` $ sslx decode eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ✓ Detected: JSON Web Token (JWT) Header: {"alg":"HS256","typ":"JWT"} Payload: {"sub":"1234567890","name":"John","iat":1516239022} Expires: in 3 hours ``` 还支持检测 PEM 证书、DER 文件、私钥、公钥以及 CSR。 ## 验证证书链 ``` sslx verify cert.pem --ca ca-bundle.pem ``` ``` ✓ Certificate is valid Chain: complete (3 certs) Expiry: 328 days remaining ``` 如果验证失败,它会准确地告诉你哪里出了问题,并提供如何修复的提示。 ## openssl 与 sslx 对比 | 你要做的事情 | openssl | sslx | |---|---|---| | 查看证书 | `openssl x509 -in cert.pem -text -noout` | `sslx inspect cert.pem` | | TLS 握手 | `openssl s_client -connect host:443 2>/dev/null \| openssl x509 -text` | `sslx connect host` | | 验证证书链 | `openssl verify -CAfile ca.pem cert.pem` | `sslx verify cert.pem --ca ca.pem` | | 自签名证书 | `openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 -keyout key.pem -out cert.pem -days 365 -nodes -batch -subj "/CN=localhost"` | `sslx generate --cn localhost` | | 创建 CSR | `openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 -keyout key.pem -out csr.pem -batch -subj "/CN=example.com"` | `sslx csr --cn example.com` | | PEM 转 DER | `openssl x509 -in cert.pem -outform DER -out cert.der` | `sslx convert cert.pem --to der` | | 检查过期时间 | `echo \| openssl s_client -connect host:443 2>/dev/null \| openssl x509 -noout -enddate` | `sslx expiry host` | | 证书和密钥匹配 | `diff <(openssl x509 -noout -modulus -in cert.pem) <(openssl rsa -noout -modulus -in key.pem)` | `sslx match cert.pem key.pem` | | TLS 评级 | (访问 ssllabs.com) | `sslx grade host` | | 解码 JWT | (访问 jwt.io) | `sslx decode ` | ## JSON 输出 每个命令都支持 `--json`,方便用于脚本和 CI: ``` # 检查过期前的剩余天数 sslx connect example.com --json | jq '.chain.certificates[0].days_remaining' # 获取 grade sslx grade example.com --json | jq '.grade' # 列出所有 SANs sslx inspect cert.pem --json | jq '.certificates[0].sans' ``` ## 退出码 | 代码 | 含义 | |---|---| | 0 | 成功 | | 1 | 证书已过期或即将过期 | | 3 | 证书链不受信任 | | 4 | 连接失败 | | 5 | 文件错误 | ## 基准测试 在 macOS M2 上运行 10 次的中位数: | | sslx | openssl | |---|---|---| | 检查证书 | 2.1ms | 9.4ms | | 生成证书 | 1.7ms | 4.5ms | | 启动 | 1.3ms | | ## Shell 自动补全 ``` sslx completions bash > /etc/bash_completion.d/sslx sslx completions zsh > ~/.zsh/completions/_sslx sslx completions fish > ~/.config/fish/completions/sslx.fish ``` ## 贡献 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。Bug 和功能请求请提交到 [issues](https://github.com/glincker/sslx/issues)。 ## 许可证 MIT
标签:Rust, rustls, TLS/SSL, 动态分析, 可视化界面, 网络检测, 网络流量审计, 证书管理, 通知系统