80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
package commands
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/authelia/authelia/internal/utils"
|
|
)
|
|
|
|
var rsaTargetDirectory string
|
|
|
|
func init() {
|
|
RSAGenerateCmd.PersistentFlags().StringVar(&rsaTargetDirectory, "dir", "", "Target directory where the keypair will be stored")
|
|
|
|
RSACmd.AddCommand(RSAGenerateCmd)
|
|
}
|
|
|
|
func generateRSAKeypair(cmd *cobra.Command, args []string) {
|
|
privateKey, publicKey := utils.GenerateRsaKeyPair(2048)
|
|
|
|
keyPath := path.Join(rsaTargetDirectory, "key.pem")
|
|
keyOut, err := os.OpenFile(keyPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
|
|
|
|
if err != nil {
|
|
log.Fatalf("Failed to open %s for writing: %v", keyPath, err)
|
|
return
|
|
}
|
|
|
|
_, err = keyOut.WriteString(utils.ExportRsaPrivateKeyAsPemStr(privateKey))
|
|
if err != nil {
|
|
log.Fatalf("Unable to write private key: %v", err)
|
|
return
|
|
}
|
|
|
|
if err := keyOut.Close(); err != nil {
|
|
log.Fatalf("Unable to close private key file: %v", err)
|
|
return
|
|
}
|
|
|
|
keyPath = path.Join(rsaTargetDirectory, "key.pub")
|
|
keyOut, err = os.OpenFile(keyPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
|
|
|
|
if err != nil {
|
|
log.Fatalf("Failed to open %s for writing: %v", keyPath, err)
|
|
return
|
|
}
|
|
|
|
publicPem, err := utils.ExportRsaPublicKeyAsPemStr(publicKey)
|
|
if err != nil {
|
|
log.Fatalf("Unable to marshal public key: %v", err)
|
|
}
|
|
|
|
_, err = keyOut.WriteString(publicPem)
|
|
if err != nil {
|
|
log.Fatalf("Unable to write private key: %v", err)
|
|
return
|
|
}
|
|
|
|
if err := keyOut.Close(); err != nil {
|
|
log.Fatalf("Unable to close public key file: %v", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
// RSACmd RSA helper command.
|
|
var RSACmd = &cobra.Command{
|
|
Use: "rsa",
|
|
Short: "Commands related to rsa keypair generation",
|
|
}
|
|
|
|
// RSAGenerateCmd certificate generation command.
|
|
var RSAGenerateCmd = &cobra.Command{
|
|
Use: "generate",
|
|
Short: "Generate a RSA keypair",
|
|
Run: generateRSAKeypair,
|
|
}
|