package main import ( "crypto/rsa" "flag" "log" "os" "dim13.org/acme" ) var confName = flag.String("conf", "acme.toml", "configuration file") func chkKey(k PrivKey) (*rsa.PrivateKey, error) { key := k.KeyPath() if k.HasKey() { fd, err := os.Open(key) if err != nil { return nil, err } defer fd.Close() return acme.LoadKey(fd) } else { fd, err := acme.CreateKeyFile(key) if err != nil { return nil, err } defer fd.Close() return acme.NewKey(fd, k.KeySize()) } } func main() { flag.Parse() conf, err := LoadConfig(*confName) if err != nil { log.Fatal(err) } for k, acc := range conf.Account { acc.key, err = chkKey(acc) if err != nil { log.Fatal(err) } conf.Account[k] = acc } for k, des := range conf.Desire { des.key, err = chkKey(des) if err != nil { log.Fatal(err) } conf.Desire[k] = des } for k, des := range conf.Desire { a, _ := acme.NewAccount(des.account.key) c := acme.Contacts{} c.AddMail(des.account.Mail) c.AddPhone(des.account.Phone) log.Println(k, a) p, err := acme.NewProvider(des.provider.Directory) if err != nil { log.Fatal(err) } log.Println(k, p) err = p.Register(a, c) if err != nil { log.Fatal("register", err) } d, err := acme.NewDesire(des.Altnames, des.Size) if err != nil { log.Fatal("newDesire", err) } err = p.Authorize(a, d) if err != nil { log.Fatal("authz", err) } err = p.Cert(a, d) if err != nil { log.Fatal("cert", err) } d.SaveKey(des.Key) d.SaveCert(des.Cert) } }