83 lines
1.7 KiB
Go
83 lines
1.7 KiB
Go
// Package genkey implements the genkey command.
|
|
package genkey
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
"github.com/cloudflare/cfssl/cli"
|
|
"github.com/cloudflare/cfssl/csr"
|
|
"github.com/cloudflare/cfssl/initca"
|
|
)
|
|
|
|
var genkeyUsageText = `cfssl genkey -- generate a new key and CSR
|
|
|
|
Usage of genkey:
|
|
cfssl genkey CSRJSON
|
|
|
|
Arguments:
|
|
CSRJSON: JSON file containing the request, use '-' for reading JSON from stdin
|
|
|
|
Flags:
|
|
`
|
|
|
|
var genkeyFlags = []string{"initca", "config"}
|
|
|
|
func genkeyMain(args []string, c cli.Config) (err error) {
|
|
csrFile, args, err := cli.PopFirstArgument(args)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if len(args) > 0 {
|
|
return errors.New("only one argument is accepted, please check with usage")
|
|
}
|
|
|
|
csrFileBytes, err := cli.ReadStdin(csrFile)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
req := csr.CertificateRequest{
|
|
KeyRequest: csr.NewBasicKeyRequest(),
|
|
}
|
|
err = json.Unmarshal(csrFileBytes, &req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if c.IsCA {
|
|
var key, csrPEM, cert []byte
|
|
cert, csrPEM, key, err = initca.New(&req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
cli.PrintCert(key, csrPEM, cert)
|
|
} else {
|
|
if req.CA != nil {
|
|
err = errors.New("ca section only permitted in initca")
|
|
return
|
|
}
|
|
|
|
var key, csrPEM []byte
|
|
g := &csr.Generator{Validator: Validator}
|
|
csrPEM, key, err = g.ProcessRequest(&req)
|
|
if err != nil {
|
|
key = nil
|
|
return
|
|
}
|
|
|
|
cli.PrintCert(key, csrPEM, nil)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validator does nothing and will never return an error. It exists because creating a
|
|
// csr.Generator requires a Validator.
|
|
func Validator(req *csr.CertificateRequest) error {
|
|
return nil
|
|
}
|
|
|
|
// Command assembles the definition of Command 'genkey'
|
|
var Command = &cli.Command{UsageText: genkeyUsageText, Flags: genkeyFlags, Main: genkeyMain}
|