func TestMain(m *testing.M) { caKeyPEM, _ := ioutil.ReadFile(caKeyFile) caKey, _ := helpers.ParsePrivateKeyPEM(caKeyPEM) caCertPEM, _ := ioutil.ReadFile(caCertFile) caCert, _ := helpers.ParseCertificatePEM(caCertPEM) // Create an online CFSSL instance // This is designed to mimic what LE plans to do authHandler, _ := auth.New(authKey, nil) policy := &cfsslConfig.Signing{ Profiles: map[string]*cfsslConfig.SigningProfile{ profileName: &cfsslConfig.SigningProfile{ Usage: []string{"server auth"}, CA: false, IssuerURL: []string{"http://not-example.com/issuer-url"}, OCSP: "http://not-example.com/ocsp", CRL: "http://not-example.com/crl", Policies: []asn1.ObjectIdentifier{ asn1.ObjectIdentifier{2, 23, 140, 1, 2, 1}, }, Expiry: 8760 * time.Hour, Backdate: time.Hour, Provider: authHandler, CSRWhitelist: &cfsslConfig.CSRWhitelist{ PublicKeyAlgorithm: true, PublicKey: true, SignatureAlgorithm: true, }, }, }, Default: &cfsslConfig.SigningProfile{ Expiry: time.Hour, }, } cfsslSigner, _ = local.NewSigner(caKey, caCert, x509.SHA256WithRSA, policy) signHandler, _ := apisign.NewAuthHandlerFromSigner(cfsslSigner) http.Handle("/api/v1/cfssl/authsign", signHandler) // This goroutine should get killed when main() return go (func() { http.ListenAndServe(hostPort, nil) })() os.Exit(m.Run()) }
// registerHandlers instantiates various handlers and associate them to corresponding endpoints. func registerHandlers(c cli.Config) error { log.Info("Setting up signer endpoint") s, err := sign.SignerFromConfig(c) if err != nil { log.Warningf("sign and authsign endpoints are disabled: %v", err) } else { if signHandler, err := apisign.NewHandlerFromSigner(s); err == nil { log.Info("Assigning handler to /sign") http.Handle("/api/v1/cfssl/sign", signHandler) } else { log.Warningf("endpoint '/api/v1/cfssl/sign' is disabled: %v", err) } if signHandler, err := apisign.NewAuthHandlerFromSigner(s); err == nil { log.Info("Assigning handler to /authsign") http.Handle("/api/v1/cfssl/authsign", signHandler) } else { log.Warningf("endpoint '/api/v1/cfssl/authsign' is disabled: %v", err) } } log.Info("Setting up info endpoint") infoHandler, err := info.NewHandler(s) if err != nil { log.Warningf("endpoint '/api/v1/cfssl/info' is disabled: %v", err) } else { http.Handle("/api/v1/cfssl/info", infoHandler) } log.Info("Setting up new cert endpoint") if err != nil { log.Errorf("endpoint '/api/v1/cfssl/newcert' is disabled") } else { newCertGenerator := generator.NewCertGeneratorHandlerFromSigner(generator.CSRValidate, s) http.Handle("/api/v1/cfssl/newcert", newCertGenerator) } log.Info("Setting up bundler endpoint") bundleHandler, err := bundle.NewHandler(c.CABundleFile, c.IntBundleFile) if err != nil { log.Warningf("endpoint '/api/v1/cfssl/bundle' is disabled: %v", err) } else { http.Handle("/api/v1/cfssl/bundle", bundleHandler) } log.Info("Setting up CSR endpoint") generatorHandler, err := generator.NewHandler(generator.CSRValidate) if err != nil { log.Errorf("Failed to set up CSR endpoint: %v", err) return err } http.Handle("/api/v1/cfssl/newkey", generatorHandler) log.Info("Setting up initial CA endpoint") http.Handle("/api/v1/cfssl/init_ca", initca.NewHandler()) log.Info("Setting up scan endpoint") http.Handle("/api/v1/cfssl/scan", scan.NewHandler()) log.Info("Setting up scaninfo endpoint") http.Handle("/api/v1/cfssl/scaninfo", scan.NewInfoHandler()) log.Info("Handler set up complete.") return nil }