From a262e55aab59f23ccce5b4ebe3771a1c5e792dc2 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 25 Dec 2015 14:21:44 +0100 Subject: Save cert --- client.go | 13 +++++++------ cmd/acme/main.go | 31 ++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/client.go b/client.go index 867c500..7a1de7c 100644 --- a/client.go +++ b/client.go @@ -4,6 +4,7 @@ import ( "crypto/rsa" "encoding/json" "errors" + "io/ioutil" "log" "net/http" "net/url" @@ -303,21 +304,21 @@ func (c *Client) Status(url string, n int, done chan bool) error { return nil } -func (c *Client) CSR(s Signer, altnames []string, key *rsa.PrivateKey) error { +func (c *Client) Cert(s Signer, altnames []string, key *rsa.PrivateKey) ([]byte, error) { csr, err := NewCSR(altnames, key) if err != nil { - return err + return nil, err } r := &CSR{ Resource: ResNewCert, CSR: csr, } - _, err = c.post(c.NewCert, s, r) + resp, err := c.post(c.NewCert, s, r) if err != nil { - return err + return nil, err } - - return nil + defer resp.Body.Close() + return ioutil.ReadAll(resp.Body) } //////////////////////////////////////////////////////////////////////// diff --git a/cmd/acme/main.go b/cmd/acme/main.go index 6b07d5e..90cfa5d 100644 --- a/cmd/acme/main.go +++ b/cmd/acme/main.go @@ -23,7 +23,6 @@ func chkKey(k PrivKey) (*rsa.PrivateKey, error) { defer fd.Close() return acme.LoadKey(fd) } else { - log.Println("allocating", key, k.KeySize()) if err := os.MkdirAll(path.Dir(key), 0700); err != nil { return nil, err } @@ -44,6 +43,19 @@ func chkCert(k Cert) error { return nil } +func saveCert(k Cert, crt []byte) error { + cert := k.CertPath() + if err := os.MkdirAll(path.Dir(cert), 0755); err != nil { + return err + } + fd, err := os.Create(cert) + if err != nil { + return err + } + defer fd.Close() + return acme.SaveCert(fd, crt) +} + func chkKeys(c *Config) error { var err error for k, acc := range c.Account { @@ -58,14 +70,6 @@ func chkKeys(c *Config) error { if err != nil { return err } - err = chkCert(des) - if err != nil { - log.Println(k, "cert missing") - _, err = acme.NewCSR(des.Altnames, des.account.key) - if err != nil { - log.Fatal(err) - } - } c.Desire[k] = des } return nil @@ -77,6 +81,7 @@ func main() { if err != nil { log.Fatal(err) } + err = chkKeys(conf) if err != nil { log.Fatal(err) @@ -103,10 +108,14 @@ func main() { log.Println("authz", err) } - err = c.CSR(a, des.Altnames, des.key) + crt, err := c.Cert(a, des.Altnames, des.key) if err != nil { log.Println("cert", err) } - } + err = saveCert(des, crt) + if err != nil { + log.Println("save cert", err) + } + } } -- cgit v1.2.3