Compare commits
	
		
			3 Commits
		
	
	
		
			dev
			...
			45dfdf0afc
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 45dfdf0afc | |||
| 6e69377d1a | |||
| 8114d667ec | 
							
								
								
									
										23
									
								
								ca.go
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								ca.go
									
									
									
									
									
								
							@@ -291,14 +291,9 @@ func parseValidity(validity string) (time.Duration, error) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SavePEM(filename string, data []byte, secure bool) error {
 | 
					func SavePEM(filename string, data []byte, secure bool) error {
 | 
				
			||||||
	if !overwrite {
 | 
					 | 
				
			||||||
	if _, err := os.Stat(filename); err == nil {
 | 
						if _, err := os.Stat(filename); err == nil {
 | 
				
			||||||
			return fmt.Errorf("file %s already exists (overwrite not allowed)", filename)
 | 
							return fmt.Errorf("file %s already exists", filename)
 | 
				
			||||||
		} else if !os.IsNotExist(err) {
 | 
					 | 
				
			||||||
			return fmt.Errorf("could not check file %s: %v", filename, err)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if secure {
 | 
						if secure {
 | 
				
			||||||
		return os.WriteFile(filename, data, 0600)
 | 
							return os.WriteFile(filename, data, 0600)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
@@ -477,8 +472,16 @@ func issueSingleCertificate(def CertificateDefinition) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Add default dns SAN for server/server-only if none specified
 | 
						// Add default dns SAN for server/server-only if none specified
 | 
				
			||||||
	if (def.Type == "server" || def.Type == "server-only") && len(def.SAN) == 0 {
 | 
						if strings.Contains(def.Type, "server") && len(def.SAN) == 0 {
 | 
				
			||||||
		def.SAN = append(def.SAN, "dns:"+def.Subject)
 | 
							// Extract CN if subject is a DN, else use subject as is
 | 
				
			||||||
 | 
							cn := def.Subject
 | 
				
			||||||
 | 
							if isDNFormat(def.Subject) {
 | 
				
			||||||
 | 
								dn := parseDistinguishedName(def.Subject)
 | 
				
			||||||
 | 
								if dn.CommonName != "" {
 | 
				
			||||||
 | 
									cn = dn.CommonName
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							def.SAN = append(def.SAN, "dns:"+cn)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	priv, err := rsa.GenerateKey(rand.Reader, 4096)
 | 
						priv, err := rsa.GenerateKey(rand.Reader, 4096)
 | 
				
			||||||
@@ -600,7 +603,7 @@ Certificate:
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// A prototype of certificate provisioning function
 | 
					// A prototype of certificate provisioning function
 | 
				
			||||||
func ProvisionCertificates(filePath string, overwrite bool, dryRun bool, verbose bool) error {
 | 
					func ProvisionCertificates(filePath string) error {
 | 
				
			||||||
	err := LoadCA()
 | 
						err := LoadCA()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -677,7 +680,7 @@ func ProvisionCertificates(filePath string, overwrite bool, dryRun bool, verbose
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func IssueCertificate(certDef CertificateDefinition, overwrite bool, dryRun bool, verbose bool) error {
 | 
					func IssueCertificate(certDef CertificateDefinition) error {
 | 
				
			||||||
	err := LoadCA()
 | 
						err := LoadCA()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		fmt.Fprintf(os.Stderr, "ERROR: %v\n", err)
 | 
							fmt.Fprintf(os.Stderr, "ERROR: %v\n", err)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								main.go
									
									
									
									
									
								
							@@ -8,7 +8,6 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Global flags available to all commands
 | 
					// Global flags available to all commands
 | 
				
			||||||
var overwrite bool
 | 
					 | 
				
			||||||
var dryRun bool
 | 
					var dryRun bool
 | 
				
			||||||
var verbose bool
 | 
					var verbose bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -46,7 +45,6 @@ func main() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Define persistent flags (global for all commands)
 | 
						// Define persistent flags (global for all commands)
 | 
				
			||||||
	rootCmd.PersistentFlags().BoolVar(&overwrite, "overwrite", false, "Allow overwriting existing files")
 | 
					 | 
				
			||||||
	rootCmd.PersistentFlags().BoolVar(&verbose, "verbose", false, "Print detailed information about each processed certificate")
 | 
						rootCmd.PersistentFlags().BoolVar(&verbose, "verbose", false, "Print detailed information about each processed certificate")
 | 
				
			||||||
	rootCmd.PersistentFlags().BoolVar(&dryRun, "dry-run", false, "Validate and show what would be created, but do not write files (batch mode)")
 | 
						rootCmd.PersistentFlags().BoolVar(&dryRun, "dry-run", false, "Validate and show what would be created, but do not write files (batch mode)")
 | 
				
			||||||
	rootCmd.PersistentFlags().StringVar(&caConfigPath, "config", "ca_config.hcl", "Path to CA configuration file")
 | 
						rootCmd.PersistentFlags().StringVar(&caConfigPath, "config", "ca_config.hcl", "Path to CA configuration file")
 | 
				
			||||||
@@ -95,7 +93,7 @@ func main() {
 | 
				
			|||||||
				Type:     certType,
 | 
									Type:     certType,
 | 
				
			||||||
				Validity: validity,
 | 
									Validity: validity,
 | 
				
			||||||
				SAN:      san,
 | 
									SAN:      san,
 | 
				
			||||||
			}, overwrite, dryRun, verbose)
 | 
								})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				fmt.Fprintf(os.Stderr, "ERROR: %v\n", err)
 | 
									fmt.Fprintf(os.Stderr, "ERROR: %v\n", err)
 | 
				
			||||||
@@ -120,7 +118,7 @@ func main() {
 | 
				
			|||||||
		Short: "Provision certificates from a batch file (HCL)",
 | 
							Short: "Provision certificates from a batch file (HCL)",
 | 
				
			||||||
		Run: func(cmd *cobra.Command, args []string) {
 | 
							Run: func(cmd *cobra.Command, args []string) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			err := ProvisionCertificates(provisionFile, overwrite, false, verbose)
 | 
								err := ProvisionCertificates(provisionFile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				fmt.Fprintf(os.Stderr, "ERROR: %v\n", err)
 | 
									fmt.Fprintf(os.Stderr, "ERROR: %v\n", err)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user