Small TEST-ONLY server for mock DNS & responding to HTTP-01, DNS-01, and TLS-ALPN-01 ACME challenges.
Go to file
Ludovic Fernandez 37390bc3ad fix: don't panic with unknown DNS question type. (#4)
* fix: don't panic with unknown DNS question type.
* fix: typos.
* refactor: use dns.Fqdn
2019-01-04 11:48:40 -05:00
vendor Initial challtestsrv package & vendored deps. 2018-12-05 12:40:26 -05:00
.gitignore Initial commit 2018-12-05 12:27:19 -05:00
.travis.yml Initial challtestsrv package & vendored deps. 2018-12-05 12:40:26 -05:00
LICENSE Initial commit 2018-12-05 12:27:19 -05:00
README.md Track challenge server request history. (#3) 2018-12-14 16:44:22 -05:00
challenge-servers.go fix: don't panic with unknown DNS question type. (#4) 2019-01-04 11:48:40 -05:00
dns.go fix: don't panic with unknown DNS question type. (#4) 2019-01-04 11:48:40 -05:00
dnsone.go Comment tweaks and delete fixes. 2018-12-06 12:03:37 -08:00
event.go Track challenge server request history. (#3) 2018-12-14 16:44:22 -05:00
go.mod go mod tidy results 2018-12-05 12:59:03 -05:00
go.sum go mod tidy results 2018-12-05 12:59:03 -05:00
httpone.go fix: don't panic with unknown DNS question type. (#4) 2019-01-04 11:48:40 -05:00
mockdns.go fix: don't panic with unknown DNS question type. (#4) 2019-01-04 11:48:40 -05:00
tlsalpnone.go Track challenge server request history. (#3) 2018-12-14 16:44:22 -05:00

README.md

Challenge Test Server

The challtestsrv package offers a library/command that can be used by test code to respond to HTTP-01, DNS-01, and TLS-ALPN-01 ACME challenges. The challtestsrv package can also be used as a mock DNS server letting developers mock A, AAAA, and CAA DNS data for specific hostnames.

Important note: The challtestsrv command and library are for TEST USAGE ONLY. It is trivially insecure, offering no authentication. Only use challtestsrv in a controlled test environment.

For example this package is used by the Boulder load-generator command to manage its own in-process HTTP-01 challenge server.

Usage

Create a challenge server responding to HTTP-01 challenges on ":8888" and DNS-01 challenges on ":9999" and "10.0.0.1:9998":

  import "github.com/letsencrypt/pebble/challtestsrv"

  challSrv, err := challtestsrv.New(challsrv.Config{
    HTTPOneAddr: []string{":8888"},
    DNSOneAddr: []string{":9999", "10.0.0.1:9998"},
  })
  if err != nil {
    panic(err)
  }

Run the Challenge server and subservers:

  // Start the Challenge server in its own Go routine
  go challSrv.Run()

Add an HTTP-01 response for the token "aaa" and the value "bbb", defer cleaning it up again:

  challSrv.AddHTTPOneChallenge("aaa", "bbb")
  defer challSrv.DeleteHTTPOneChallenge("aaa")

Add a DNS-01 TXT response for the host "_acme-challenge.example.com." and the value "bbb", defer cleaning it up again:

  challSrv.AddDNSOneChallenge("_acme-challenge.example.com.", "bbb")
  defer challSrv.DeleteHTTPOneChallenge("_acme-challenge.example.com.")

Get the history of HTTP requests processed by the challenge server for the host "example.com":

requestHistory := challSrv.RequestHistory("example.com", challtestsrv.HTTPRequestEventType)

Clear the history of HTTP requests processed by the challenge server for the host "example.com":

challSrv.ClearRequestHistory("example.com", challtestsrv.HTTPRequestEventType)

Stop the Challenge server and subservers:

  // Shutdown the Challenge server
  challSrv.Shutdown()

For more information on the package API see Godocs and the associated package sourcecode.