sslx: A fast, modern alternative to OpenSSL's CLI
sslx openssl, but you don't have to google the flags. A single binary that handles certs, TLS connections, and all the stuff you normally need three different openssl invocations for. Built with Rust and rustls , no system OpenSSL required. Install cargo install sslx Prebuilt binaries on the releases page . Homebrew: brew install glincker/tap/sslx Or download directly: # 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 grade Rate the TLS setup of any host, like SSL Labs but from your terminal: $ 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 Checks protocol version, cipher strength, cert validity, key type, hostname matching, chain completeness, and ALPN. Gives you a letter grade from A+ to F. Expiry check Check cert expiry on a bunch of hosts at once: $ 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 Exit code 1 if anything expires within 7 days. Useful in cron jobs or CI pipelines. Inspect certificates Read a PEM or DER cert file with colored output: $ 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๐ฟEF:12:34... โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ Handles multi-cert bundles too. Auto-detects PEM vs DER. Connect to a host See the full TLS handshake details and cert chain for any host: $ 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) โโโโโโโโโโโโโโโโโโโโโฎ โ ... โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ Generate certs Self-signed cert for local dev in one command: sslx generate --cn localhost --san " *.local,127.0.0.1 " Creates cert.pem and key.pem with EC P-256 by default. Also supports ec384 and ed25519 . Generate a CSR sslx csr --cn example.com --san " *.example.com,api.example.com " Creates csr.pem and key.pem . Submit the CSR to your CA. Convert between formats 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 Auto-detects input format. Check cert+key match $ sslx match cert.pem key.pem โ Certificate and key match (ECDSA P-256 (256 bit)) No more comparing modulus hashes manually. Extract from PKCS12 sslx extract bundle.p12 --password mypass --out ./certs Pulls out the leaf cert, intermediates, and key into separate PEM files. Decode anything Throw a file or a JWT token at it and sslx figures out what it is: $ sslx decode eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... โ Detected: JSON Web Token (JWT) Header: {"alg":"HS256","typ":"JWT"} Payload: {"sub":"1234567890","name":"John","iat":1516239022} Expires: in 3 hours Also detects PEM certs, DER files, private keys, public keys, and CSRs. Verify a chain sslx verify cert.pem --ca ca-bundle.pem โ Certificate is valid Chain: complete (3 certs) Expiry: 328 days remaining Tells you exactly what's wrong if it fails, with hints on how to fix it. openssl vs sslx What you're doing openssl sslx Look at a cert openssl x509 -in cert.pem -text -noout sslx inspect cert.pem TLS handshake openssl s_client -connect host:443 2>/dev/null | openssl x509 -text sslx connect host Verify chain openssl verify -CAfile ca.pem cert.pem sslx verify cert.pem --ca ca.pem Self-signed cert 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 Create 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 to DER openssl x509 -in cert.pem -outform DER -out cert.der sslx convert cert.pem --to der Check expiry echo | openssl s_client -connect host:443 2>/dev/null | openssl x509 -noout -enddate sslx expiry host Cert+key match diff <(openssl x509 -noout -modulus -in cert.pem) <(openssl rsa -noout -modulus -in key.pem) sslx match cert.pem key.pem TLS grade (go to ssllabs.com) sslx grade host Decode JWT (go to jwt.io) sslx decode JSON output Every command supports --json for scripting and CI: # check days until expiry sslx connect example.com --json | jq ' .chain.certificates[0].days_remaining ' # get the grade sslx grade example.com --json | jq ' .grade ' # list all SANs sslx inspect cert.pem --json | jq ' .certificates[0].sans ' Exit codes Code Meaning 0 ok 1 cert expired or expiring 3 chain untrusted 4 connection failed 5 bad file Benchmarks Median of 10 runs on macOS M2: sslx openssl inspect cert 2.1ms 9.4ms generate cert 1.7ms 4.5ms startup 1.3ms Shell completions sslx completions bash > /etc/bash_completion.d/sslx sslx completions zsh > ~ /.zsh/completions/_sslx sslx completions fish > ~ /.config/fish/completions/sslx.fish Community Join the GLINR Discord to ask questions, share feedback, or talk to other users. This project has its own forum channel, #sslx. Contributing See CONTRIBUTING.md . Bugs and feature requests go in issues . License MIT
Source: https://github.com/glincker/sslx
Comments
No comments yet. Start the discussion.