summaryrefslogtreecommitdiff
path: root/modules/caddytls/internalissuer.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/caddytls/internalissuer.go')
-rw-r--r--modules/caddytls/internalissuer.go57
1 files changed, 39 insertions, 18 deletions
diff --git a/modules/caddytls/internalissuer.go b/modules/caddytls/internalissuer.go
index ca43bf8..d70b8ca 100644
--- a/modules/caddytls/internalissuer.go
+++ b/modules/caddytls/internalissuer.go
@@ -23,6 +23,7 @@ import (
"time"
"github.com/caddyserver/caddy/v2"
+ "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
"github.com/caddyserver/caddy/v2/modules/caddypki"
"github.com/caddyserver/certmagic"
"github.com/smallstep/certificates/authority/provisioner"
@@ -63,25 +64,25 @@ func (InternalIssuer) CaddyModule() caddy.ModuleInfo {
}
// Provision sets up the issuer.
-func (li *InternalIssuer) Provision(ctx caddy.Context) error {
+func (iss *InternalIssuer) Provision(ctx caddy.Context) error {
// get a reference to the configured CA
appModule, err := ctx.App("pki")
if err != nil {
return err
}
pkiApp := appModule.(*caddypki.PKI)
- if li.CA == "" {
- li.CA = caddypki.DefaultCAID
+ if iss.CA == "" {
+ iss.CA = caddypki.DefaultCAID
}
- ca, ok := pkiApp.CAs[li.CA]
+ ca, ok := pkiApp.CAs[iss.CA]
if !ok {
- return fmt.Errorf("no certificate authority configured with id: %s", li.CA)
+ return fmt.Errorf("no certificate authority configured with id: %s", iss.CA)
}
- li.ca = ca
+ iss.ca = ca
// set any other default values
- if li.Lifetime == 0 {
- li.Lifetime = caddy.Duration(defaultInternalCertLifetime)
+ if iss.Lifetime == 0 {
+ iss.Lifetime = caddy.Duration(defaultInternalCertLifetime)
}
return nil
@@ -89,38 +90,38 @@ func (li *InternalIssuer) Provision(ctx caddy.Context) error {
// IssuerKey returns the unique issuer key for the
// confgured CA endpoint.
-func (li InternalIssuer) IssuerKey() string {
- return li.ca.ID()
+func (iss InternalIssuer) IssuerKey() string {
+ return iss.ca.ID()
}
// Issue issues a certificate to satisfy the CSR.
-func (li InternalIssuer) Issue(ctx context.Context, csr *x509.CertificateRequest) (*certmagic.IssuedCertificate, error) {
+func (iss InternalIssuer) Issue(ctx context.Context, csr *x509.CertificateRequest) (*certmagic.IssuedCertificate, error) {
// prepare the signing authority
authCfg := caddypki.AuthorityConfig{
- SignWithRoot: li.SignWithRoot,
+ SignWithRoot: iss.SignWithRoot,
}
- auth, err := li.ca.NewAuthority(authCfg)
+ auth, err := iss.ca.NewAuthority(authCfg)
if err != nil {
return nil, err
}
// get the cert (public key) that will be used for signing
var issuerCert *x509.Certificate
- if li.SignWithRoot {
- issuerCert = li.ca.RootCertificate()
+ if iss.SignWithRoot {
+ issuerCert = iss.ca.RootCertificate()
} else {
- issuerCert = li.ca.IntermediateCertificate()
+ issuerCert = iss.ca.IntermediateCertificate()
}
// ensure issued certificate does not expire later than its issuer
- lifetime := time.Duration(li.Lifetime)
+ lifetime := time.Duration(iss.Lifetime)
if time.Now().Add(lifetime).After(issuerCert.NotAfter) {
// TODO: log this
lifetime = issuerCert.NotAfter.Sub(time.Now())
}
certChain, err := auth.Sign(csr, provisioner.Options{},
- profileDefaultDuration(li.Lifetime),
+ profileDefaultDuration(iss.Lifetime),
)
if err != nil {
return nil, err
@@ -139,6 +140,26 @@ func (li InternalIssuer) Issue(ctx context.Context, csr *x509.CertificateRequest
}, nil
}
+// UnmarshalCaddyfile deserializes Caddyfile tokens into iss.
+//
+// ... internal {
+// ca <name>
+// }
+//
+func (iss *InternalIssuer) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
+ for d.Next() {
+ for d.NextBlock(0) {
+ switch d.Val() {
+ case "ca":
+ if !d.AllArgs(&iss.CA) {
+ return d.ArgErr()
+ }
+ }
+ }
+ }
+ return nil
+}
+
// profileDefaultDuration is a wrapper against x509util.WithOption to conform
// the SignOption interface.
//