Small TEST-ONLY server for mock DNS & responding to HTTP-01, DNS-01, and TLS-ALPN-01 ACME challenges.
Go to file
Daniel McCarney 17a3d105f3
Track challenge server request history. (#3)
Its useful for testing purposes to be able to find out what requests have been processed by the challenge test servers.

For example it may be useful to see that redirects were properly followed or that CAA tree climbing resulted in the expected DNS queries.
2018-12-14 16:44:22 -05:00
vendor
.gitignore
.travis.yml
LICENSE
README.md Track challenge server request history. (#3) 2018-12-14 16:44:22 -05:00
challenge-servers.go Track challenge server request history. (#3) 2018-12-14 16:44:22 -05:00
dns.go Track challenge server request history. (#3) 2018-12-14 16:44:22 -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 Track challenge server request history. (#3) 2018-12-14 16:44:22 -05:00
mockdns.go Comment tweaks and delete fixes. 2018-12-06 12:03:37 -08: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.