ocspserve.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Package ocspserve implements the ocspserve function.
  2. package ocspserve
  3. import (
  4. "errors"
  5. "fmt"
  6. "net/http"
  7. "github.com/cloudflare/cfssl/cli"
  8. "github.com/cloudflare/cfssl/log"
  9. "github.com/cloudflare/cfssl/ocsp"
  10. )
  11. // Usage text of 'cfssl serve'
  12. var ocspServerUsageText = `cfssl ocspserve -- set up an HTTP server that handles OCSP requests from a file (see RFC 5019)
  13. Usage of ocspserve:
  14. cfssl ocspserve [-address address] [-port port] [-responses file]
  15. Flags:
  16. `
  17. // Flags used by 'cfssl serve'
  18. var ocspServerFlags = []string{"address", "port", "responses"}
  19. // ocspServerMain is the command line entry point to the OCSP responder.
  20. // It sets up a new HTTP server that responds to OCSP requests.
  21. func ocspServerMain(args []string, c cli.Config) error {
  22. // serve doesn't support arguments.
  23. if len(args) > 0 {
  24. return errors.New("argument is provided but not defined; please refer to the usage by flag -h")
  25. }
  26. if c.Responses == "" {
  27. return errors.New("no response file provided, please set the -responses flag")
  28. }
  29. src, err := ocsp.NewSourceFromFile(c.Responses)
  30. if err != nil {
  31. return errors.New("unable to read response file")
  32. }
  33. log.Info("Registering OCSP responder handler")
  34. http.Handle(c.Path, ocsp.NewResponder(src))
  35. addr := fmt.Sprintf("%s:%d", c.Address, c.Port)
  36. log.Info("Now listening on ", addr)
  37. return http.ListenAndServe(addr, nil)
  38. }
  39. // Command assembles the definition of Command 'ocspserve'
  40. var Command = &cli.Command{UsageText: ocspServerUsageText, Flags: ocspServerFlags, Main: ocspServerMain}