OPENSSL-ECH(1SSL)
β¨ 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
ECHConfigListthat 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 multipleinarguments, 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 encodedECHConfigList. But if one or more input files were provided, the output file holds a set ofECHConfigListvalues 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: only0xfe0dis 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 π
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
- ubuntu stonking: openssl 4.0.3-1ubuntu1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms