lacme is a small ACME client written with process isolation and minimal privileges in mind. It is divided into four components, each with its own executable: * A process to manage the account key and issue SHA-256 signatures needed for each ACME command. (This process binds to a UNIX-domain socket to reply to signature requests from the ACME client.) One can use the UNIX-domain socket forwarding facility of OpenSSH 6.7 and later to run this process on a different host. * A "master" process, which runs as root and is the only component with access to the private key material of the server keys. It is used to fork the ACME client (and optionally the ACME webserver) after dropping root privileges. For certificate issuances, it also generates Certificate Signing Requests, then verifies the validity of the issued certificate, and optionally reloads or restarts services when the notify option is set. * An actual ACME client, which builds ACME commands and dialogues with the remote ACME server. Since ACME commands need to be signed with the account key, the "master" process passes the UNIX-domain socket of the account key manager to the ACME client: data signatures are requested by writing the data to be signed to the socket. * For certificate issuances, an optional webserver, which is spawned by the "master" process when no service is listening on the HTTP port. (The only challenge type currently supported is "http-01", which requires a webserver to answer challenges.) That webserver only processes GET and HEAD requests under the "/.well-known/acme-challenge/" URI. By default some iptables(8) rules are automatically installed to open the HTTP port, and removed afterwards. Consult the manuals for more information. https://guilhem.org/man/lacme.1.html https://guilhem.org/man/lacme-accountd.1.html _______________________________________________________________________ Requesting new Certificate Issuance with the ACME protocol generally works as follows: 1. Generate a Certificate Signing Request. This requires access to the private part of the server key. 2. Issue an issuance request against the ACME server. 3. Answer the ACME Identifier Validation Challenges. The challenge type "http-01" requires a webserver to listen on port 80 for each address for which an authorization request is issued; if there is no running webserver, root privileges are required to bind against port 80 and to install firewall rules to temporarily open the port. 4. Install the certificate (after verification) and restart the service. This usually requires root access as well. Steps 1,3,4 need to be run on the host for which an authorization request is issued. However the the issuance itself (step 2) could be done from another machine. Furthermore, each ACME command (step 2), as well as the key authorization token in step 3, need to be signed using an account key. The account key can be stored on another machine, or even on a smartcard. _______________________________________________________________________ lacme is Copyright© 2016 Guilhem Moulin ⟨guilhem@fripost.org⟩, and licensed for use under the GNU General Public License version 3 or later. See ‘COPYING’ for specific terms and distribution information.