func getAuthFiles(c *cli.Context) ([]*TarFile, error) { name := "ca" tarFiles := make([]*TarFile, 0) crtFile, err := d.GetFile(depot.AuthCrtTag()) if err != nil { return nil, errors.New("Get CA certificate error: " + err.Error()) } crtTarFile, err := generateTarFile(crtFile, name+crtSuffix) if err != nil { return nil, errors.New("Generate certificate tar file error: " + err.Error()) } tarFiles = append(tarFiles, crtTarFile) keyFile, err := d.GetFile(depot.AuthPrivKeyTag()) if err != nil { return nil, errors.New("Get CA key error: " + err.Error()) } keyTarFile, err := generateTarFile(keyFile, name+keySuffix) if err != nil { return nil, errors.New("Generate key tar file error: " + err.Error()) } if c.Bool("insecure") { if keyTarFile, err = decryptEncryptedKeyTarFile(keyTarFile, getPassPhrase(c, name+" key")); err != nil { return nil, errors.New("Get decrypted CA key error: " + err.Error()) } } tarFiles = append(tarFiles, keyTarFile) return tarFiles, nil }
func newSignAction(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.CheckCertificateHost(d, name) { fmt.Fprintln(os.Stderr, "Certificate has existed!") os.Exit(1) } csr, err := depot.GetCertificateSigningRequest(d, name) if err != nil { fmt.Fprintln(os.Stderr, "Get certificate request error:", err) os.Exit(1) } crt, err := depot.GetCertificateAuthority(d) if err != nil { fmt.Fprintln(os.Stderr, "Get CA certificate error:", err) if isFileNotExist(err) { fmt.Fprintln(os.Stderr, "Please run 'etcd-ca init' to initial the depot.") } os.Exit(1) } info, err := depot.GetCertificateAuthorityInfo(d) if err != nil { fmt.Fprintln(os.Stderr, "Get CA certificate info error:", err) os.Exit(1) } key, err := depot.GetEncryptedPrivateKeyAuthority(d, getPassPhrase(c, "CA key")) if err != nil { fmt.Fprintln(os.Stderr, "Get CA key error:", err) os.Exit(1) } crtHost, err := pkix.CreateCertificateHost(crt, info, key, csr, c.Int("years"), c.Bool("server"), c.Bool("client")) if err != nil { fmt.Fprintln(os.Stderr, "Create certificate error:", err) os.Exit(1) } else { fmt.Printf("Created %s/crt from %s/csr signed by ca/key\n", name, name) } if err = depot.PutCertificateHost(d, name, crtHost); err != nil { fmt.Fprintln(os.Stderr, "Save certificate error:", err) } if err = depot.UpdateCertificateAuthorityInfo(d, info); err != nil { fmt.Fprintln(os.Stderr, "Update CA info error:", err) } }