Support for DNS-01 and HTTP-01 ACME challenges (closes #226)
This commit is contained in:
68
tests/resources/acme/config.toml
Normal file
68
tests/resources/acme/config.toml
Normal file
@@ -0,0 +1,68 @@
|
||||
acme.pebble.contact = "postmaster@example.org"
|
||||
acme.pebble.directory = "https://localhost:14000/dir"
|
||||
#acme.pebble.domains = "mail.example.org"
|
||||
acme.pebble.renew-before = "30d"
|
||||
|
||||
acme.pebble.challenge = "tls-alpn-01"
|
||||
#acme.pebble.challenge = "http-01"
|
||||
#acme.pebble.challenge = "dns-01"
|
||||
|
||||
acme.pebble.domains = "*.example.org"
|
||||
acme.pebble.provider = "cloudflare"
|
||||
acme.pebble.secret = "<KEY>"
|
||||
|
||||
authentication.fallback-admin.secret = "secret"
|
||||
authentication.fallback-admin.user = "admin"
|
||||
config.local-keys.0 = "*"
|
||||
directory.internal.store = "rocksdb"
|
||||
directory.internal.type = "internal"
|
||||
lookup.default.hostname = "mail.example.org"
|
||||
lookup.default.domain = "example.org"
|
||||
oauth.key = "0Wn7rO4UdmBoE8mp3cDcD9Qlpz3na74z7fGRoSuq8fVsGPelLl3KrHomBN8h2biA"
|
||||
queue.quota.size.enable = true
|
||||
queue.quota.size.messages = 100000
|
||||
queue.quota.size.size = 10737418240
|
||||
queue.throttle.rcpt.concurrency = 5
|
||||
queue.throttle.rcpt.enable = true
|
||||
queue.throttle.rcpt.key = "rcpt_domain"
|
||||
report.analysis.addresses = "postmaster@*"
|
||||
server.http.permissive-cors = true
|
||||
server.listener.http.bind = "[::]:5002"
|
||||
server.listener.http.protocol = "http"
|
||||
server.listener.https.bind = "[::]:5001"
|
||||
server.listener.https.protocol = "http"
|
||||
server.listener.https.tls.implicit = true
|
||||
server.listener.imap.bind = "[::]:143"
|
||||
server.listener.imap.protocol = "imap"
|
||||
server.listener.imaptls.bind = "[::]:993"
|
||||
server.listener.imaptls.protocol = "imap"
|
||||
server.listener.imaptls.tls.implicit = true
|
||||
server.listener.sieve.bind = "[::]:4190"
|
||||
server.listener.sieve.protocol = "managesieve"
|
||||
server.listener.smtp.bind = "[::]:25"
|
||||
server.listener.smtp.protocol = "smtp"
|
||||
server.listener.submission.bind = "[::]:587"
|
||||
server.listener.submission.protocol = "smtp"
|
||||
server.listener.submissions.bind = "[::]:465"
|
||||
server.listener.submissions.protocol = "smtp"
|
||||
server.listener.submissions.tls.implicit = true
|
||||
session.throttle.ip.concurrency = 5
|
||||
session.throttle.ip.enable = true
|
||||
session.throttle.ip.key = "remote_ip"
|
||||
session.throttle.sender.enable = true
|
||||
session.throttle.sender.key.0 = "sender_domain"
|
||||
session.throttle.sender.key.1 = "rcpt"
|
||||
session.throttle.sender.rate = "25/1h"
|
||||
storage.blob = "rocksdb"
|
||||
storage.data = "rocksdb"
|
||||
storage.directory = "internal"
|
||||
storage.fts = "rocksdb"
|
||||
storage.lookup = "rocksdb"
|
||||
store.rocksdb.compression = "lz4"
|
||||
store.rocksdb.path = "/tmp/stalwart-temp-data"
|
||||
store.rocksdb.type = "rocksdb"
|
||||
tracer.stdout.ansi = true
|
||||
tracer.stdout.enable = true
|
||||
tracer.stdout.level = "trace"
|
||||
tracer.stdout.type = "stdout"
|
||||
version.spam-filter = 1.0
|
||||
@@ -1,13 +1,14 @@
|
||||
# docker-compose -f docker-compose-pebble.yaml up
|
||||
# curl --request POST --data '{"ip":"192.168.5.2"}' http://localhost:8055/set-default-ipv4
|
||||
# HTTPS port should be 5001
|
||||
# HTTP port should be 5002
|
||||
# Directory https://localhost:14000/dir
|
||||
|
||||
version: '3'
|
||||
services:
|
||||
pebble:
|
||||
image: letsencrypt/pebble:latest
|
||||
command: pebble -config /test/config/pebble-config.json -strict -dnsserver 10.30.50.3:8053
|
||||
command: pebble -config /test/config/pebble-config.json -strict -dnsserver 8.8.8.8:53 #-dnsserver 10.30.50.3:8053
|
||||
ports:
|
||||
- 14000:14000 # HTTPS ACME API
|
||||
- 15000:15000 # HTTPS Management API
|
||||
9
tests/resources/acme/test_acme.sh
Normal file
9
tests/resources/acme/test_acme.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -Rf /tmp/stalwart-temp-data
|
||||
mkdir -p /tmp/stalwart-temp-data
|
||||
cp ./tests/resources/acme/config.toml /tmp/stalwart-temp-data/config.toml
|
||||
|
||||
curl --request POST --data '{"ip":"192.168.5.2"}' http://localhost:8055/set-default-ipv4
|
||||
|
||||
cargo run -p mail-server --no-default-features --features "sqlite foundationdb postgres mysql rocks elastic s3 redis" -- --config=/tmp/stalwart-temp-data/config.toml
|
||||
@@ -308,7 +308,7 @@ impl common::listener::SessionManager for SessionManager {
|
||||
session
|
||||
.instance
|
||||
.acceptor
|
||||
.accept(session.stream, false)
|
||||
.accept(session.stream, None)
|
||||
.await
|
||||
.unwrap_tls()
|
||||
.await
|
||||
|
||||
@@ -368,8 +368,7 @@ impl TestServerInstance for ServerInstance {
|
||||
id: "smtp".to_string(),
|
||||
protocol: ServerProtocol::Smtp,
|
||||
acceptor: TcpAcceptor::Tls {
|
||||
acme_config: tls_config.clone(),
|
||||
default_config: tls_config.clone(),
|
||||
config: tls_config.clone(),
|
||||
acceptor: TlsAcceptor::from(tls_config),
|
||||
implicit: false,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user