1
0
Fork 0
forked from External/grumble

4096-bit RSA keys by default. Auto-regen keys if a cert or key is missing.

This commit is contained in:
Mikkel Krautz 2011-11-08 16:12:54 +01:00
parent 3014d5fe39
commit 53db9cd2fb
3 changed files with 34 additions and 22 deletions

18
args.go
View file

@ -9,14 +9,14 @@ import (
) )
type args struct { type args struct {
ShowHelp bool ShowHelp bool
DataDir string DataDir string
BlobDir string BlobDir string
CtlNet string CtlNet string
CtlAddr string CtlAddr string
GenerateCert bool RegenKeys bool
SQLiteDB string SQLiteDB string
CleanUp bool CleanUp bool
} }
func defaultGrumbleDir() string { func defaultGrumbleDir() string {
@ -63,7 +63,7 @@ func init() {
flag.StringVar(&Args.BlobDir, "blobdir", defaultBlobDir(), "Directory to use for blob storage") flag.StringVar(&Args.BlobDir, "blobdir", defaultBlobDir(), "Directory to use for blob storage")
flag.StringVar(&Args.CtlNet, "ctlnet", defaultCtlNet(), "Network to use for ctl socket") flag.StringVar(&Args.CtlNet, "ctlnet", defaultCtlNet(), "Network to use for ctl socket")
flag.StringVar(&Args.CtlAddr, "ctladdr", defaultCtlAddr(), "Address to use for ctl socket") flag.StringVar(&Args.CtlAddr, "ctladdr", defaultCtlAddr(), "Address to use for ctl socket")
flag.BoolVar(&Args.GenerateCert, "gencert", false, "Generate a self-signed certificate for use with Grumble") flag.BoolVar(&Args.RegenKeys, "regenkeys", false, "Force Grumble to regenerate its global RSA keypair and certificate")
// SQLite related // SQLite related
if SQLiteSupport { if SQLiteSupport {

View file

@ -17,7 +17,7 @@ import (
"time" "time"
) )
// Generate a 2048-bit RSA keypair and a Grumble auto-generated X509 // Generate a 4096-bit RSA keypair and a Grumble auto-generated X509
// certificate. Output PEM-encoded DER representations of the resulting // certificate. Output PEM-encoded DER representations of the resulting
// certificate and private key to certpath and keypath. // certificate and private key to certpath and keypath.
func GenerateSelfSignedCert(certpath, keypath string) (err error) { func GenerateSelfSignedCert(certpath, keypath string) (err error) {
@ -34,7 +34,7 @@ func GenerateSelfSignedCert(certpath, keypath string) (err error) {
KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
} }
priv, err := rsa.GenerateKey(rand.Reader, 2048) priv, err := rsa.GenerateKey(rand.Reader, 4096)
if err != nil { if err != nil {
return err return err
} }

View file

@ -44,23 +44,35 @@ func main() {
log.Fatalf("Unable to initialize blobstore: %v", err.Error()) log.Fatalf("Unable to initialize blobstore: %v", err.Error())
} }
if Args.GenerateCert { certFn := filepath.Join(Args.DataDir, "cert")
certfn := filepath.Join(Args.DataDir, "cert") keyFn := filepath.Join(Args.DataDir, "key")
keyfn := filepath.Join(Args.DataDir, "key") shouldRegen := false
log.Printf("Generating 2048-bit RSA keypair for self-signed certificate...") if Args.RegenKeys {
shouldRegen = true
} else {
files := []string{certFn, keyFn}
for _, fn := range files {
_, err := os.Stat(fn)
if err != nil {
if e, ok := err.(*os.PathError); ok {
if e.Err == os.ENOENT {
shouldRegen = true
}
}
}
}
}
if shouldRegen {
log.Printf("Generating 4096-bit RSA keypair for self-signed certificate...")
err := GenerateSelfSignedCert(certfn, keyfn) err := GenerateSelfSignedCert(certFn, keyFn)
if err != nil { if err != nil {
log.Printf("Error: %v", err) log.Printf("Error: %v", err)
return return
} }
log.Printf("Certificate output to %v", certfn) log.Printf("Certificate output to %v", certFn)
log.Printf("Private key output to %v", keyfn) log.Printf("Private key output to %v", keyFn)
log.Printf("Done generating certificate and private key.")
log.Printf("Please restart Grumble to make use of the generated certificate and private key.")
return
} }
// Should we import data from a Murmur SQLite file? // Should we import data from a Murmur SQLite file?