Crates.io | coyote |
lib.rs | coyote |
version | 0.1.1 |
source | src |
created_at | 2021-09-13 05:44:14.803687 |
updated_at | 2022-02-17 22:39:28.585382 |
description | Embeddable ACME server with programmable challenges and storage |
homepage | https://github.com/zerotier/coyote |
repository | https://github.com/zerotier/coyote |
max_upload_size | |
id | 450338 |
size | 277,777 |
Coyote lets you make ACME servers, which are not guaranteed to not explode in your face. You have to code that out yourself.
coyote aims to solve a few problems (not all of these are solved yet; see "Task List" below):
acmed
comes as an example with coyote; it is a complete canonical implementation against PostgreSQL for backing storage. It (deliberately) allows all challenges through and is not meant for production usage.
coyote
is intended to let you build an ACME service without using acmed
itself, leveraging the traits and tools available in this library for scaffolding. For example, work to implement a Redis based nonce validation system would just be a trait implementation, even though it is not available in this library.
acmed
acmed is a very small, example implementation of coyote, intended to demonstrate usage of it. It is not meant or designed to be used in a production environment. It does not perform challenges properly, allowing all of them that come in.
You'll need docker
to launch the postgres instance. Plain HTTP works better with certbot
for testing so you don't have to dink with your roots; if you want to use caddy
or other ACME clients you will need to use a HTTPS enabled service, see "TLS" below.
To launch:
$ make postgres
$ cargo run --example acmed
It will start a service on http://127.0.0.1:8000
which you can then pass as
the --server
flag to certbot
, e.g.:
certbot --server 'http://127.0.0.1:8000' certonly --standalone -d 'foo.com' -m 'erik+github@hollensbe.org' --agree-tos
acmed-tls
We provide the TLS example as acmed-tls; just provide HOSTNAME
to set a host name for TLS service; otherwise localhost
is assumed. A CA at ca.pem
and ca.key
will be generated at the directory you run the cargo
commands from, which you will need to pass to clients to your certificates. Also, a TLS in-memory cert will be generated to serve the acmed
instance. It will start a service on https://${HOSTNAME}:8000
which you can then pass as the acme_ca
global directive in caddy.
Otherwise, the use is the same.
To access the postgres instance that acmed
is running against (provided by make postgres
):
psql -U postgres -h localhost coyote
docker
is required to run the tests. The tests take around 70 seconds to run on a 5900X and use all 24 threads most of the test runtime. Be mindful of the time they take, especially when running them on a slower system.
cargo test
/key-change
endpoint, see RFC8555 7.3.5)trust-dns-client
maybe?)These are things that are not covered by our initial goals, and we do not feel they are higher priority items. We will happily accept pull requests for this functionality.
This software is covered by the BSD-3-Clause License. See LICENSE.txt for more details.