1
0
mirror of https://github.com/smallstep/cli.git synced 2025-08-09 03:22:43 +03:00

Allow to add confirmation claims to tokens

This commit allows passing confirmation claims to tokens to tie the
tokens with a provided CSR or SSH public key.

The confirmation claim is implemented in the token command as well as
the com commands that uses a given CSR or ssh public key. Those are:

  - step ca token
  - step ca sign
  - step ssh certificate --sign

Fixes smallstep/certificates#1637
This commit is contained in:
Mariano Cano
2023-12-28 17:14:42 -08:00
parent c85690b3fb
commit 4616c58b2e
12 changed files with 250 additions and 40 deletions

View File

@@ -267,7 +267,41 @@ func certificateAction(ctx *cli.Context) error {
}
}
flow, err := cautils.NewCertificateFlow(ctx)
var (
sshPub ssh.PublicKey
pub, priv interface{}
flowOptions []cautils.Option
)
if isSign {
in, err := utils.ReadFile(keyFile)
if err != nil {
return err
}
sshPub, _, _, _, err = ssh.ParseAuthorizedKey(in)
if err != nil {
return errors.Wrap(err, "error parsing ssh public key")
}
if len(sshPrivKeyFile) > 0 {
if priv, err = pemutil.Read(sshPrivKeyFile); err != nil {
return errors.Wrap(err, "error parsing private key")
}
}
flowOptions = append(flowOptions, cautils.WithSSHPublicKey(sshPub))
} else {
pub, priv, err = keyutil.GenerateDefaultKeyPair()
if err != nil {
return err
}
sshPub, err = ssh.NewPublicKey(pub)
if err != nil {
return errors.Wrap(err, "error creating public key")
}
}
flow, err := cautils.NewCertificateFlow(ctx, flowOptions...)
if err != nil {
return err
}
@@ -353,38 +387,6 @@ func certificateAction(ctx *cli.Context) error {
identityKey = key
}
var sshPub ssh.PublicKey
var pub, priv interface{}
if isSign {
// Use public key supplied as input.
in, err := utils.ReadFile(keyFile)
if err != nil {
return err
}
sshPub, _, _, _, err = ssh.ParseAuthorizedKey(in)
if err != nil {
return errors.Wrap(err, "error parsing ssh public key")
}
if len(sshPrivKeyFile) > 0 {
if priv, err = pemutil.Read(sshPrivKeyFile); err != nil {
return errors.Wrap(err, "error parsing private key")
}
}
} else {
// Generate keypair
pub, priv, err = keyutil.GenerateDefaultKeyPair()
if err != nil {
return err
}
sshPub, err = ssh.NewPublicKey(pub)
if err != nil {
return errors.Wrap(err, "error creating public key")
}
}
var sshAuPub ssh.PublicKey
var sshAuPubBytes []byte
var auPub, auPriv interface{}