Files
weave/test/tls/generate_certs.go
T

82 lines
1.8 KiB
Go

package main
import (
"fmt"
"log"
"os"
"github.com/docker/machine/libmachine/cert"
)
const (
org = "vagrant"
bits = 2048
caKeyPath = "ca-key.pem"
caCertPath = "ca.pem"
clientKeyPath = "key.pem"
clientCertPath = "cert.pem"
serverKeyPath = "server-key.pem"
serverCertPath = "server.pem"
)
func main() {
if _, err := os.Stat(caCertPath); os.IsNotExist(err) {
log.Printf("Creating CA: %s", caCertPath)
// check if the key path exists; if so, error
if _, err := os.Stat(caKeyPath); err == nil {
log.Fatalf("The CA key already exists. Please remove it or specify a different key/cert.")
}
if err := cert.GenerateCACertificate(caCertPath, caKeyPath, org, bits); err != nil {
log.Printf("Error generating CA certificate: %s", err)
}
}
if _, err := os.Stat(clientCertPath); os.IsNotExist(err) {
log.Printf("Creating client certificate: %s", clientCertPath)
// check if the key path exists; if so, error
if _, err := os.Stat(clientKeyPath); err == nil {
log.Fatalf("The client key already exists. Please remove it or specify a different key/cert.")
}
err = cert.GenerateCert(
[]string{""},
clientCertPath,
clientKeyPath,
caCertPath,
caKeyPath,
org,
bits,
)
if err != nil {
log.Fatalf("Error generating client certificate: %s", err)
}
}
if len(os.Args) <= 1 {
return
}
for _, ip := range os.Args[1:] {
serverKeyPath := fmt.Sprintf("%s-key.pem", ip)
serverCertPath := fmt.Sprintf("%s.pem", ip)
if _, err := os.Stat(serverCertPath); os.IsNotExist(err) {
log.Printf("Creating server certificate: %s", serverCertPath)
err = cert.GenerateCert(
[]string{ip},
serverCertPath,
serverKeyPath,
caCertPath,
caKeyPath,
org,
bits,
)
if err != nil {
log.Fatalf("error generating server cert: %s", err)
}
}
}
}