#letsencrypt #acme #async #alpn #tls

async-acme

async ACME client for tls-alpn-01 challenge

5 unstable releases

0.3.1 Nov 16, 2021
0.3.0 Nov 15, 2021
0.2.0 Oct 7, 2021
0.1.1 Jul 10, 2021
0.1.0 Jul 8, 2021

#4 in #letsencrypt

Download history 3/week @ 2021-08-05 5/week @ 2021-08-12 4/week @ 2021-08-19 1/week @ 2021-09-02 3/week @ 2021-09-16 2/week @ 2021-09-23 1/week @ 2021-09-30 26/week @ 2021-10-07 15/week @ 2021-10-14 6/week @ 2021-10-21 6/week @ 2021-11-04 256/week @ 2021-11-11 596/week @ 2021-11-18

74 downloads per month
Used in flash_rust_ws

MIT license

43KB
897 lines

Project Status: Active – The project has reached a stable, usable state and is being actively developed. Crates.io Released API docs MIT licensed

A generic async ACME create.

The main goal is to allow binaries to choose what async runtime and TLS lib is used.

Features

You need to specify via features what crates are used to the actual work.

feature flag Meaning
use_tokio Use tokio as async runtime
use_async_std Use async_std as async runtime
use_rustls Use rustls for HTTPS and generate Certificates tailored to it
hyper_rustls use_rustls+use_tokio GitHub Workflow Status
async_std_rustls use_rustls+use_async_std GitHub Workflow Status

Without anything specified you will end up with no async backend selected or no crypto backend selected. If you use this crate for a library, please reexport the apropriate features.

Motivation

Rust offers different async runtimes that - on a high level - offer the same thing: asyncrounes functions for files, sockets and so on.

So if you write a lib and need some basic stiff (like an http client) you sometimes have to make choices that are not what your crates users would have liked. For example: I wrote a webserver based on hyper and wanted to add ACME. A crate I found did what I needed but used async-h1 and async-std. While that worked, it did increase the binary size and crates I depend on by a good amount.

So I wrote this. You can specify which backend to use. In the Webserver case, using --features="hyper_rustls" (same dependencies) instead of --features="async_std_rustls" did lead to 81 less crates and a 350kB smaller binary. Using:

[profile.release]
lto = "fat"
codegen-units = 1

Examples

These query certs from Let's Encrypts Staging endpoint. In order for them to work you need to change the email and domain from example.com to your own.

  1. Hyper server with rustls: cargo run --example hyper_rustls --features="hyper_rustls"
  2. async-std server with rustls: cargo run --example async_rustls --features="async_std_rustls"

Plans

  1. Add native_tls
  2. Add openssl cert generation

Dependencies

~4–11MB
~229K SLoC