-
Notifications
You must be signed in to change notification settings - Fork 3
/
tls.go
50 lines (47 loc) 路 1.61 KB
/
tls.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package main
import (
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"log"
"os"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/vx-labs/wasp/rpc"
)
func TLSHelper(config *viper.Viper) *cobra.Command {
c := &cobra.Command{
Use: "tls",
Short: "Generate TLS certificate and private key.",
PreRun: func(c *cobra.Command, _ []string) {
config.BindPFlag("certificate-file", c.Flags().Lookup("certificate-file"))
config.BindPFlag("private-key-file", c.Flags().Lookup("private-key-file"))
},
Run: func(cmd *cobra.Command, _ []string) {
log.Printf("INFO: generating self-signed TLS certificate.")
log.Printf("INFO: if this operation seems too long, check this host's entropy.")
tlsCert, err := rpc.GenerateSelfSignedCertificate(os.Getenv("HOSTNAME"), []string{"*"}, rpc.ListLocalIP())
if err != nil {
log.Printf("ERR: %v", err)
return
}
certFile, err := os.Create(config.GetString("certificate-file"))
if err != nil {
log.Printf("ERR: %v", err)
return
}
defer certFile.Close()
keyFile, err := os.Create(config.GetString("private-key-file"))
if err != nil {
log.Printf("ERR: %v", err)
return
}
defer keyFile.Close()
pem.Encode(keyFile, &pem.Block{Type: "PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(tlsCert.PrivateKey.(*rsa.PrivateKey))})
pem.Encode(certFile, &pem.Block{Type: "CERTIFICATE", Bytes: tlsCert.Leaf.Raw})
},
}
c.Flags().StringP("certificate-file", "c", "./run_config/cert.pem", "Write certificate to this file")
c.Flags().StringP("private-key-file", "k", "./run_config/privkey.pem", "Write private key to this file")
return c
}