ACME-CLIENT.CONF(5)

πŸ“¦ version 1.3.7, in alpine 3.24, nixos 26.05, nixpkgs unstable

πŸŽ€ acme-client.conf(5) β€” the file formats manual, bestie edition πŸ’…

okay so you're here because you've got an acme-client.conf file and you want to know what goes in it. say less β€” this is the <italic>file formats manual</italic> for acme-client.conf, and we're gonna go through it together, section by section, no cap. πŸ¦‹


✨ NAME ✨

acme-client.conf β€” the acme-client configuration file. that's it, that's the name, she's iconic πŸ‘‘


🌸 DESCRIPTION 🌸

the acme-client.conf file is split into these main sections, and yes you need to know all of them:

  • β€œMacros” β€” definitions of variables that you can use later, which keeps the config file from being a whole mess. lowkey a lifesaver 🫢
  • β€œAuthorities” β€” certificate authorities (CAs) that can be contacted via ACME.
  • β€œDomains” β€” certificate specifications. the actual good stuff.

you can pull in extra config files with the include keyword, like literally:

include "/etc/acme-client.sub.conf"

the current line can be stretched over multiple lines using a backslash (\). comments can go anywhere in the file with a hash mark (#), and they run to the end of the current line. ⚠️ but be careful when you're commenting out multi-line text: the comment is effective until the end of the entire block β€” so yeah, it eats the whole thing, not just one line. πŸ’€

also: arguments that don't begin with a letter, a digit, an underscore, or / must be quoted. no exceptions, bestie, the parser is not playing around.

🧚 Macros

a macro gets defined with a command like name=value. the macro name can contain letters, digits, and underscores β€” but it cannot be a reserved word, so don't try it. πŸ™ˆ inside unquoted arguments, the string $name gets expanded to value later on.

for example, look how clean this is:

api_url="https://acme-v02.api.letsencrypt.org/directory"
authority letsencrypt {
        api url $api_url
        account key "/etc/acme/letsencrypt-privkey.pem"
}

see how $api_url just slots in? obsessed. ✨


πŸ‘‘ Authorities

these are the configured certificate authorities.

each authority section starts with a declaration of the name that identifies a certificate authority.

authority name {...} the name is a string used to reference this certificate authority.

then it's followed by a block of options wrapped in curly brackets:

  • account key file [keytype] β€” specifies a file used to identify the user of this certificate authority. keytype can be rsa or ecdsa, and it defaults to rsa.
  • api url url β€” specifies the url under which the ACME API is reachable.
  • contact contact β€” optional contact URLs that the authority can use to contact the client about issues related to this account. 🫢

πŸ¦‹ Domains

these are the certificates to be obtained through ACME.

domain handle {...} each domain section begins with the domain keyword followed by an identifier for this domain block. usually that identifier is the domain name β€” but if you're requesting certificates of different types (EC and RSA) for the same name, the handle identifiers should be unique and you should use the domain name directive instead. iykyk πŸ’…

then comes a block of options in curly brackets:

  • domain name name β€” the name to be used as the primary Subject Alternative Name (SAN) in the X.509 certificate. this is optional; if you don't specify it, the handle of the domain block gets used instead.
  • alternative names {...} β€” a list of additional names, comma or space separated, for which the certificate will be valid. if the CA and the selected profile support it, you can use fully qualified domain names, IPv4, or IPv6 addresses. πŸŽ€ there is no automatic conversion/inclusion between the "www." form and the plain domain name form β€” so don't assume, write it out.
  • domain key file [keytype] β€” the private key file for which the certificate will be obtained. keytype can be rsa or ecdsa, and it defaults to rsa. if the key file doesn't exist, acme-client(1) will generate a key itself (4096-bit for rsa or secp384r1 for ecdsa). she's self-sufficient πŸ’…
  • domain certificate file β€” the filename of the certificate that will be issued. this is optional if domain full chain certificate is specified. a backup with name file.1 is created if file exists.
  • domain chain certificate file β€” the filename in which to store the certificate chain that will be returned by the certificate authority. it needs to be in the same directory as the domain certificate (or in a subdirectory) and can be specified as a relative or absolute path. this setting is optional. a backup with name file.1 is created if file exists.
  • domain full chain certificate file β€” the filename in which to store the full certificate chain that will be returned by the certificate authority. it needs to be in the same directory as the domain certificate (or in a subdirectory) and can be specified as a relative or absolute path. this is a combination of the domain certificate and the domain chain certificate in one file, and most browsers straight up require it. this is optional if domain certificate is specified. a backup with name file.1 is created if file exists. πŸ”₯
  • profile profile β€” the certificate profile to be requested. if this setting is absent, no profile request is made.
  • sign with authority β€” the certificate authority (as declared above in the β€œAuthorities” section) to use. if this setting is absent, the first authority specified is used.
  • challengedir path β€” the directory in which the challenge file will be stored. if it's not specified, a default of /var/www/acme is used.

πŸŽ€ FILES πŸŽ€

  • /etc/acme-client.conf β€” acme-client(1) configuration file.
  • /etc/examples/acme-client.conf β€” example configuration file. (go look at it, fr fr πŸ‘€)

πŸ’– SEE ALSO πŸ’–

acme-client(1)


⭐ HISTORY ⭐

the acme-client.conf file format first appeared in OpenBSD 6.1. she's been serving since day one, periodt. 🌈


🌸 and that's the whole page, bestie β€” go write a config that slays. πŸ’…

this was the Debian build of acme-client.conf(5), dated February 23, 2026 β€” mwah, bye! πŸ’œπŸŽ€

πŸ“¦ where this page comes from