#trillium #tls-certificate #acme #https #tls #autocert

trillium-acme

通过Let's Encrypt和ACME tls-alpn-01挑战,为trillium.rs提供自动HTTPS证书

4个版本 (2个重大更改)

0.3.0 2024年6月25日
0.2.0 2024年1月15日
0.1.1 2023年10月27日
0.1.0 2023年10月27日

#173 in HTTP服务器

MIT/Apache

25KB
168

trillium-acme可以帮助您通过自动证书、使用Let’s Encrypt和ACME tls-alpn-01挑战,在Trillium中使用HTTPS。

要使用trillium-acme,创建一个AcmeConfig来配置您想要的证书,然后调用trillium_acme::new来创建一个Acceptor和一个future。使用与服务器相同的stopper启动future,然后将Acceptor传递到服务器配置

use trillium_acme::AcmeConfig;
use trillium_acme::rustls_acme::caches::DirCache;

let config = AcmeConfig::new(["domain.example"])
    .contact_push("mailto:[email protected]")
    .cache(DirCache::new("/srv/example/acme-cache-dir"));

let (acceptor, future) = trillium_acme::new(config);
let stopper = trillium_smol::Stopper::new();
let future = stopper.stop_future(future);
trillium_smol::spawn(async {
    future.await;
});
trillium_smol::config()
    .with_port(443)
    .with_host("0.0.0.0")
    .with_nodelay()
    .with_acceptor(acceptor)
    .with_stopper(stopper)
    .run(|conn: trillium::Conn| async move {
       conn.ok("Hello TLS!")
    });

这将配置TLS堆栈以获取域domain.example的证书,该域必须是Trillium服务器处理的HTTPS流量域。

在首次启动时,您的服务器将通过Let's Encrypt注册一个证书。Let's Encrypt将通过一个ACME tls-alpn-01挑战来验证您的服务器对域的控制,该挑战将由trillium-acme配置的TLS监听器响应。

您必须通过AcmeConfig::cache或其他缓存方法提供一个缓存。此缓存将在运行之间保持ACME账户密钥和已注册证书,以避免超出配额限制。您可以使用rustls_acme::caches::DirCache进行简单的文件系统缓存,或使用rustls_acme缓存特质实现自己的缓存。

默认情况下,trillium-acme将使用Let's Encrypt的测试环境,这对于测试目的很合适;它产生由测试根签名的证书,以便您可以验证您的堆栈是否正常工作,但这些证书在浏览器或其他HTTPS客户端中不受信任。测试环境在测试期间有更慷慨的配额限制。

当您准备好部署到生产环境时,可以通过调用 .directory_lets_encrypt(true) 来切换到生产环境的Let's Encrypt环境,该环境生成的证书在浏览器和其他HTTPS客户端中被信任。生产环境具有更严格的速率限制

trillium-acme 建立在 rustls-acme 库之上。

依赖关系

~24–44MB
~1M SLoC