Compare commits
	
		
			2 Commits
		
	
	
		
			v0.2
			...
			a8308e0f4f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a8308e0f4f | |||
| 911d33deb2 | 
							
								
								
									
										18
									
								
								ca.go
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								ca.go
									
									
									
									
									
								
							@@ -271,7 +271,7 @@ func parseValidity(validity string) (time.Duration, error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SavePEM(filename string, data []byte, secure bool, overwrite bool) error {
 | 
					func SavePEM(filename string, data []byte, secure bool) error {
 | 
				
			||||||
	if !overwrite {
 | 
						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 (overwrite not allowed)", filename)
 | 
				
			||||||
@@ -321,7 +321,7 @@ func (c *_CAConfig) Validate() error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func InitCA(overwrite bool) error {
 | 
					func InitCA() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -409,11 +409,11 @@ func InitCA(overwrite bool) error {
 | 
				
			|||||||
	certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER})
 | 
						certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER})
 | 
				
			||||||
	keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)})
 | 
						keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := SavePEM(filepath.Join(CAConfig.Paths.Certificates, "ca_cert.pem"), certPEM, false, overwrite); err != nil {
 | 
						if err := SavePEM(filepath.Join(CAConfig.Paths.Certificates, "ca_cert.pem"), certPEM, false); err != nil {
 | 
				
			||||||
		fmt.Println("Error saving CA certificate:", err)
 | 
							fmt.Println("Error saving CA certificate:", err)
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := SavePEM(filepath.Join(CAConfig.Paths.PrivateKeys, "ca_key.pem"), keyPEM, true, overwrite); err != nil {
 | 
						if err := SavePEM(filepath.Join(CAConfig.Paths.PrivateKeys, "ca_key.pem"), keyPEM, true); err != nil {
 | 
				
			||||||
		fmt.Println("Error saving CA key:", err)
 | 
							fmt.Println("Error saving CA key:", err)
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -433,7 +433,7 @@ func InitCA(overwrite bool) error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Helper: issue a single certificate and key, save to files, return error if any
 | 
					// Helper: issue a single certificate and key, save to files, return error if any
 | 
				
			||||||
func issueSingleCertificate(def CertificateDefinition, overwrite, verbose bool) error {
 | 
					func issueSingleCertificate(def CertificateDefinition) error {
 | 
				
			||||||
	// Validate Name
 | 
						// Validate Name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	isValidName, err := regexp.MatchString(`^[A-Za-z0-9_-]+$`, def.Name)
 | 
						isValidName, err := regexp.MatchString(`^[A-Za-z0-9_-]+$`, def.Name)
 | 
				
			||||||
@@ -536,10 +536,10 @@ func issueSingleCertificate(def CertificateDefinition, overwrite, verbose bool)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	certFile := filepath.Join(CAConfig.Paths.Certificates, basename+".crt.pem")
 | 
						certFile := filepath.Join(CAConfig.Paths.Certificates, basename+".crt.pem")
 | 
				
			||||||
	keyFile := filepath.Join(CAConfig.Paths.PrivateKeys, basename+".key.pem")
 | 
						keyFile := filepath.Join(CAConfig.Paths.PrivateKeys, basename+".key.pem")
 | 
				
			||||||
	if err := SavePEM(certFile, certPEM, false, overwrite); err != nil {
 | 
						if err := SavePEM(certFile, certPEM, false); err != nil {
 | 
				
			||||||
		return fmt.Errorf("error saving certificate: %v", err)
 | 
							return fmt.Errorf("error saving certificate: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := SavePEM(keyFile, keyPEM, true, overwrite); err != nil {
 | 
						if err := SavePEM(keyFile, keyPEM, true); err != nil {
 | 
				
			||||||
		return fmt.Errorf("error saving key: %v", err)
 | 
							return fmt.Errorf("error saving key: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if verbose {
 | 
						if verbose {
 | 
				
			||||||
@@ -622,7 +622,7 @@ func ProvisionCertificates(filePath string, overwrite bool, dryRun bool, verbose
 | 
				
			|||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err = issueSingleCertificate(certDefs.Certificates[i], overwrite, verbose)
 | 
							err = issueSingleCertificate(certDefs.Certificates[i])
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			fmt.Printf("error: %v\n", err)
 | 
								fmt.Printf("error: %v\n", err)
 | 
				
			||||||
			errors++
 | 
								errors++
 | 
				
			||||||
@@ -664,7 +664,7 @@ func IssueCertificate(certDef CertificateDefinition, overwrite bool, dryRun bool
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = issueSingleCertificate(certDef, overwrite, verbose)
 | 
						err = issueSingleCertificate(certDef)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
				
			|||||||
module koszewscy.waw.pl/slawek/lab-ca
 | 
					module gitea.koszewscy.waw.pl/slawek/lab-ca
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go 1.24.5
 | 
					go 1.24.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										21
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								main.go
									
									
									
									
									
								
							@@ -9,22 +9,31 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
var Version = "dev"
 | 
					var Version = "dev"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Global flags available to all commands
 | 
				
			||||||
 | 
					var overwrite bool
 | 
				
			||||||
 | 
					var dryRun bool
 | 
				
			||||||
 | 
					var verbose bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var overwrite bool
 | 
						// issue command flags
 | 
				
			||||||
 | 
						var name string
 | 
				
			||||||
	var subject string
 | 
						var subject string
 | 
				
			||||||
	var certType string
 | 
						var certType string
 | 
				
			||||||
	var validity string
 | 
						var validity string
 | 
				
			||||||
	var san []string
 | 
						var san []string
 | 
				
			||||||
	var name string
 | 
					
 | 
				
			||||||
	var dryRun bool
 | 
						// provision command flags
 | 
				
			||||||
	var verbose bool
 | 
						var provisionFile string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// crl command flags
 | 
				
			||||||
	var crlFile string
 | 
						var crlFile string
 | 
				
			||||||
	var crlValidityDays int
 | 
						var crlValidityDays int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// revoke command flags
 | 
				
			||||||
	var revokeName string
 | 
						var revokeName string
 | 
				
			||||||
	var revokeSerial string
 | 
						var revokeSerial string
 | 
				
			||||||
	var revokeReasonStr string
 | 
						var revokeReasonStr string
 | 
				
			||||||
	var provisionFile string
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var rootCmd = &cobra.Command{
 | 
						var rootCmd = &cobra.Command{
 | 
				
			||||||
		Use:   "lab-ca",
 | 
							Use:   "lab-ca",
 | 
				
			||||||
@@ -46,7 +55,7 @@ func main() {
 | 
				
			|||||||
		Use:   "initca",
 | 
							Use:   "initca",
 | 
				
			||||||
		Short: "Generate a new CA certificate and key",
 | 
							Short: "Generate a new CA certificate and key",
 | 
				
			||||||
		Run: func(cmd *cobra.Command, args []string) {
 | 
							Run: func(cmd *cobra.Command, args []string) {
 | 
				
			||||||
			InitCA(overwrite)
 | 
								InitCA()
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rootCmd.AddCommand(initCmd)
 | 
						rootCmd.AddCommand(initCmd)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user