aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-12-25 14:21:44 +0100
committerDimitri Sokolyuk <demon@dim13.org>2015-12-25 14:21:44 +0100
commita262e55aab59f23ccce5b4ebe3771a1c5e792dc2 (patch)
tree3459f2052c800dacc01a9dc784aab16628f14805
parentd856337a7dbe4bbab82aaf735c859d203ba89a40 (diff)
Save cert
-rw-r--r--client.go13
-rw-r--r--cmd/acme/main.go31
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)
+ }
+ }
}