func newCertAction(c *cli.Context) { if len(c.Args()) != 1 { fmt.Fprintln(os.Stderr, "One host name must be provided.") os.Exit(1) } name := c.Args()[0] if depot.CheckCertificateSigningRequest(d, name) || depot.CheckPrivateKeyHost(d, name) { fmt.Fprintln(os.Stderr, "Certificate request has existed!") os.Exit(1) } var passphrase []byte var err error if c.IsSet("passphrase") { passphrase = []byte(c.String("passphrase")) } else { passphrase, err = createPassPhrase() if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } key, err := pkix.CreateRSAKey(c.Int("key-bits")) if err != nil { fmt.Fprintln(os.Stderr, "Create RSA Key error:", err) os.Exit(1) } else { fmt.Printf("Created %s/key\n", name) } csr, err := pkix.CreateCertificateSigningRequest(key, name, c.String("ip"), c.String("domain"), c.String("organization"), c.String("country")) if err != nil { fmt.Fprintln(os.Stderr, "Create certificate request error:", err) os.Exit(1) } else { fmt.Printf("Created %s/crt\n", name) } if err = depot.PutCertificateSigningRequest(d, name, csr); err != nil { fmt.Fprintln(os.Stderr, "Save certificate request error:", err) } if err = depot.PutEncryptedPrivateKeyHost(d, name, key, passphrase); err != nil { fmt.Fprintln(os.Stderr, "Save key error:", err) } }
func initAction(c *cli.Context) { if depot.CheckCertificateAuthority(d) || depot.CheckCertificateAuthorityInfo(d) || depot.CheckPrivateKeyAuthority(d) { fmt.Fprintln(os.Stderr, "CA has existed!") os.Exit(1) } var passphrase []byte var err error if c.IsSet("passphrase") { passphrase = []byte(c.String("passphrase")) } else { passphrase, err = createPassPhrase() if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } key, err := pkix.CreateRSAKey(c.Int("key-bits")) if err != nil { fmt.Fprintln(os.Stderr, "Create RSA Key error:", err) os.Exit(1) } else { fmt.Println("Created ca/key") } crt, info, err := pkix.CreateCertificateAuthority(key) if err != nil { fmt.Fprintln(os.Stderr, "Create certificate error:", err) os.Exit(1) } else { fmt.Println("Created ca/crt") } if err = depot.PutCertificateAuthority(d, crt); err != nil { fmt.Fprintln(os.Stderr, "Save certificate error:", err) } if err = depot.PutCertificateAuthorityInfo(d, info); err != nil { fmt.Fprintln(os.Stderr, "Save certificate info error:", err) } if err = depot.PutEncryptedPrivateKeyAuthority(d, key, passphrase); err != nil { fmt.Fprintln(os.Stderr, "Save key error:", err) } }