OPENSSL-ECH(1SSL)

πŸ“¦
version 4.0.3 Β· 2 versions
, in ubuntu stonking

✨ openssl-ech β€” ECH key generation ✨

okay bestie, welcome to openssl-ech, aka the glow-up station for your Encrypted Client Hello keys πŸ¦‹ (and yeah, it lives in the OpenSSL 1SSL manual squad, iykyk).


🌸 SYNOPSIS 🌸

openssl ech [-help] [-verbose] [-in files] [-out file] [-public_name
name] [-max_name_len len] [-suite suite_str] [-ech_version version]
[-select number] [-text]

πŸ’– DESCRIPTION πŸ’–

So like. The openssl-ech(1) command generates Encrypted Client Hello (ECH) key pairs, and it writes them out in the ECHConfig PEM file format that's specified in <https://datatracker.ietf.org/doc/rfc9934>. No cap. πŸ’…

And that format? It's giving two things stacked together:

  • an optional private key, in PKCS#8 format, and
  • a base64 encoded ECHConfigList that contains an entry with a matching public value (and possibly other entries too, bestie, it's flexible like that).

✨ OPTIONS ✨

Here's everything that's supported, one by one, no skipping, periodt:

  • -help β€” prints out a usage message. That's it, that's the whole vibe. πŸ™ˆ
  • -verbose β€” prints more verbosely. more words, more chaos, more clarity. πŸ”₯
  • -in β€” give it an input ECH PEM file, for printing or merging. You can pass up to five input files by using multiple in arguments, one after another. πŸ‘‘
  • -out file β€” the name of your output ECHConfig PEM file. Here's the tea: if a new key pair was generated, the output file holds the private key and the encoded ECHConfigList. But if one or more input files were provided, the output file holds a set of ECHConfigList values with public keys from the inputs, and no private key(s). zero. none. πŸ’€
  • -text β€” gives you human-readable text output. readable!! we love that for us. πŸŽ€
  • -public_name name β€” the DNS name to use in the "public_name" field of the ECHConfig.
  • -max_name_len num β€” the value to use for the maximum name length field in the ECHConfig.
  • -suite str β€” the HPKE suite to use in the ECHConfig.
  • -ech_version version β€” the ECH version to use in the ECHConfig. Heads up bestie: only 0xfe0d is supported in this version. So don't get cute with it. 😭
  • -select number β€” picks the N-th ECHConfig/public key out of the set of input ECH PEM files and outputs that one. main character selection energy πŸ‘‘

🧚 NOTES 🧚

Ciphersuites get specified one of two ways β€” pick your fighter:

  • a comma-separated list of IANA-registered codes/numbers, like "-c 0x20,1,3", or
  • a comma-separated list of strings from these little categories:
  • KEMs: p256, p384, p521, x25519, x448
  • KDFs: hkdf-sha256, hkdf-sha384, hkdf-sha512
  • AEADs: aes128gcm, aes256gcm, chachapoly1305

And for the record, the default is literally: x25519, hkdf-sha256, aes128gcm ✨

Wanna know the details? See OSSL_HPKE_CTX_new(3).


🌈 SEE ALSO 🌈


πŸ’œ HISTORY πŸ’œ

All of this functionality, as described right here? Added in OpenSSL 4.0. iconic behavior. 🫢


Copyright 2024-2026 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.

fr fr bestie, read the license, it's not optional πŸ’–

and that's the whole page, mwah πŸ’… this one's from OpenSSL 4.0.3, dated 2026-09-29, and it goes by OPENSSL-ECH(1SSL) β€” stay slay, stay encrypted, bye bestie πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from